我对OpenCV还是很陌生,我做了一个小程序,可以从视频流中检测左眼,并在其周围画一个框。
它使用this haar级联来实现。
代码如下:
import cv2
videoCapture = cv2.VideoCapture(0)
cascade = cv2.CascadeClassifier("leftEye.xml") # from https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_lefteye_2splits.xml
streamWidth = int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH))
streamHeight = int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT))
while True:
_, normalFrame = videoCapture.read()
normalFrameGrayOverlay = cv2.cvtColor(normalFrame, cv2.COLOR_BGR2GRAY)
eyes = cascade.detectMultiScale(normalFrameGrayOverlay, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)
for (x, y, w, h) in eyes:
cv2.rectangle(normalFrameGrayOverlay, (x, y), (x + w, y + h), (0, 0, 0), 2)
print("X" + str(x) + "Y" + str(y))
cv2.imshow("ArduinoFaceDetection", normalFrameGrayOverlay)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
videoCapture.release()
cv2.destroyAllWindows()
但是,当我开始播放视频流时,它会一次突出显示多只眼睛(有时会突出显示墙壁,但这只是我的恐怖相机)。我想知道是否有一种方法可以只瞄准一只眼睛(最好是左眼,因为haar级联状态),这样我就不会从print("X" + str(x) + "Y" + str(y))
行中获得大量信息。
谢谢!