Tôi đang làm phát hiện học sinh cho dự án trường học của tôi. Đây là lần đầu tiên tôi làm việc với OpenCV và Python, sử dụng phiên bản Python 3.4.2 và OpenCV 3.1.0.phát hiện học sinh trong OpenCV & Python
Tôi đang sử dụng máy ảnh Raspberry Pi NoIR và tôi đang nhận được hình ảnh tốt. .
Nhưng tôi không thể phát hiện một học sinh độc đáo (vì tia sáng lóe lên, lông mi và bóng tôi tham khảo một số mã trên web và sau đây là một phần của mã mà
...
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
# capture frames from the camera
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
image = frame.array
cv2.imshow("image", image)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
retval, thresholded = cv2.threshold(gray, 80, 255, 0)
cv2.imshow("threshold", thresholded)
closed = cv2.erode(cv2.dilate(thresholded, kernel, iterations=1), kernel, iterations=1)
#closed = cv2.morphologyEx(close, cv2.MORPH_CLOSE, kernel)
cv2.imshow("closed", closed)
thresholded, contours, hierarchy = cv2.findContours(closed, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
drawing = np.copy(image)
cv2.drawContours(drawing, contours, -1, (255, 0, 0), 2)
for contour in contours:
area = cv2.contourArea(contour)
bounding_box = cv2.boundingRect(contour)
extend = area/(bounding_box[2] * bounding_box[3])
# reject the contours with big extend
if extend > 0.8:
continue
# calculate countour center and draw a dot there
m = cv2.moments(contour)
if m['m00'] != 0:
center = (int(m['m10']/m['m00']), int(m['m01']/m['m00']))
cv2.circle(drawing, center, 3, (0, 255, 0), -1)
# fit an ellipse around the contour and draw it into the image
try:
ellipse = cv2.fitEllipse(contour)
cv2.ellipse(drawing, box=ellipse, color=(0, 255, 0))
except:
pass
# show the frame
cv2.imshow("Drawing", drawing)
...
hình ảnh đầu vào.: hình ảnh
Output:
Làm cách nào để xóa các phần của hình ảnh không liên quan đến học sinh, như được hiển thị ở trên?
Ngoài câu trả lời, mọi gợi ý cũng được hoan nghênh.
liên quan: [Đẩy nhanh giải thuật mắt theo dõi vectorized trong NumPy] (https://stackoverflow.com/questions/35996257/speeding-up-vectorized-eye-tracking-algorithm-in-numpy) . Bạn cũng có thể kiểm tra tính tròn ([mã ví dụ] (https://github.com/Itseez/opencv/blob/3.1.0/modules/features2d/src/blobdetector.cpp#L222)). – Catree
Các tùy chọn khác: phát hiện trực tiếp vòng tròn với [HoughCircles] (http://docs.opencv.org/3.1.0/dd/d1a/group__imgproc__feature.html#ga47849c3be0d0406ad3ca45db65a25d2d) và/hoặc chỉ giữ đường bao nếu vùng bên trong tối hơn ở ngoài. Nếu mắt luôn ở giữa và ở cùng khoảng cách, bạn cũng có thể xác định một vùng quan tâm (ROI) + sử dụng vùng đó. – Catree
Tôi sẽ sử dụng [erode] (http://docs.opencv.org/2.4/modules/imgproc/doc/filtering.html?highlight=erode#erode) trên hình ảnh nhị phân và sau đó chỉ cần thực hiện [HoughCircles] (http: //docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/hough_circle/hough_circle.html) để phát hiện vòng kết nối quan trọng nhất trong hình ảnh. – 0x90