2014-10-11 2 views
0

모션 감지 코드를 사용해야하는데 다음 코드를 사용합니다 : http://www.steinm.com/blog/motion-detection-webcam-python-opencv-differential-images/. 다음은 코드입니다 :cv2.cvtColor 오류입니다. 벌레 야?

import cv2 

def diffImg(t0, t1, t2): 
    d1 = cv2.absdiff(t2, t1) 
    d2 = cv2.absdiff(t1, t0) 
    return cv2.bitwise_and(d1, d2) 

cam = cv2.VideoCapture(0) 


winName = "Movement Indicator" 
cv2.namedWindow(winName, cv2.CV_WINDOW_AUTOSIZE) 

# Read three images first: 
t_minus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY) 
t = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY) 
t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY) 

while True: 
    cv2.imshow(winName, diffImg(t_minus, t, t_plus)) 
    #diff = diffImg(t_minus, t, t_plus) 

    # Read next image 
    t_minus = t 
    t = t_plus 
    t_plus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY) 

    #cv2.imshow(winName, diff) 
    key = cv2.waitKey(10) 
    if key == 27: 
     cv2.destroyWindow(winName) 
     break 

print "Goodbye" 

처음에는이 원활하게 실행,하지만 지금, 그것은 나에게 오류 제공 : 내가 유래의 다양한 솔루션을 찾았지만 여전히 오류가 발생

cv2.error: ........\opencv\modules\imgproc\src\color.cpp:3737: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor

합니다. 소스에 올바른 색상 형식이 없기 때문에 오류가 발생했다고합니다 (코드에서 세 번 째 인수가 필요함). 오류가 발생한 이유를 누구나 들려 줄 수 있습니까? 아니면 그 opencv 버그와 거기에 대한 해결책은 없나요?

+0

일부 블로그에 대한 링크가 아닌 * 여기 * 사용 된 코드를 붙여주십시오. 또한 문제가되는 이미지를 추가하십시오. – berak

+0

실수로 죄송합니다. 나는 이미 내 질문을 편집했다. 이미지는 카메라에서 가져옵니다 - 카메라에서 실시간으로 캡처합니다. 너 나 좀 도와 줄 수있어? – rizkie

+1

cam.read()는 다음을 반환합니다. err, img. 오류 값을 무시하지 않아야합니다. 당신은 아마도 어떤 종류의 딸꾹질을 붙잡고, 일시적으로 프레임을 전달할 수 없습니다. (나는 의심 스럽다. img는 단지 비어있다. *) – berak

답변

0

문제는

# ^

t_minus = cv2.cvtColor(cam.read()[1], cv2.COLOR_RGB2GRAY)

당신이 BGR 이미지의 [1] 인덱스를 액세스하는 , 그것은 더 이상 cv2.COLOR_RGB2GRAY를 사용하여 변환 할 수있는 컬러 이미지와 없습니다. 대신 cam.read()으로 작성하십시오. 또한 OpenCV는 RGB가 아닌 BGR을 기본적으로 사용합니다.