Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用opencv仅检测视频中的左眼?_Python_Windows_Opencv_Haar Classifier - Fatal编程技术网

Python 如何使用opencv仅检测视频中的左眼?

Python 如何使用opencv仅检测视频中的左眼?,python,windows,opencv,haar-classifier,Python,Windows,Opencv,Haar Classifier,我只想在视频流中检测左眼,但我不能。当我运行这段代码时,它会检测两只眼睛(左右),有时还会像检测眼睛一样检测嘴巴或鼻子 请遵循以下代码: import cv2 import numpy as np faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') #eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') eye_cascade = c

我只想在视频流中检测左眼,但我不能。当我运行这段代码时,它会检测两只眼睛(左右),有时还会像检测眼睛一样检测嘴巴或鼻子

请遵循以下代码:

import cv2
import numpy as np

faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_lefteye_2splits.xml')

video_capture = cv2.VideoCapture(0)

while True:
    ret, img = video_capture.read()
    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    faces = faceCascade.detectMultiScale(
        gray_img,
        scaleFactor=1.98,
        minNeighbors=8,
        minSize=(80, 80),
        flags=cv2.cv.CV_HAAR_SCALE_IMAGE    
    )    

    #print 'faces: ', faces
    for (p,q,r,s) in faces:
        #cv2.rectangle(img,(p,q),(p+r,q+s),(255,0,0),3)
        face_gray = gray_img[q:q+s, p:p+r]
        face_color = img[q:q+s, p:p+r]
        eyes = eye_cascade.detectMultiScale(face_gray)
        for (ep,eq,er,es) in eyes:
            cv2.rectangle(face_color,(ep,eq),(ep+er,eq+es), (0,255,0),3)

    rimg = cv2.flip(img, 1) # invert the object img
    cv2.imshow("Video", rimg)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

video_capture.release()
cv2.destroyAllWindows()
那么,我应该怎样做才能只检测左眼呢


PS:我在这个程序中使用了Python 2.7.13、NumPy 1.10.0和OpenCV 2.4.13.3

您可以使用一个简单的for循环来遍历眼睛级联返回的眼睛,并找到具有最小x坐标的眼睛索引。这将为您提供最左眼的索引

def getleftmosteye(眼睛):
最左侧=999999
leftmostindex=-1
对于范围(0,2)内的i:

如果眼睛[i][0]有什么具体结果?你如何训练这个模特?我们(或我们大多数人)不会阅读此代码来对过程和结果进行反向工程。请阅读并遵循帮助文档中的发布指南。我希望这段代码能让我根据左眼移动光标,但我不能只检测左眼。我的代码与此站点中的代码几乎相似,但我的代码是用Python编写的。