Haar Cascade ClassificationとLucas Kanadeの優れた特徴検出を組み合わせたフェイストラッカーを作成しようとしています。しかし、それが何を意味するのか、どのように解決するのかがわからないというエラーが出続けます。
誰でもここで私を助けることができますか?
エラー:
line 110, in <module>
cv2.imshow('frame',img)
error: /build/buildd/opencv-2.4.8+dfsg1/modules/highgui/src/window.cpp:269:
error: (-215)size.width>0 && size.height>0 in function imshow
コード:
from matplotlib import pyplot as plt
import numpy as np
import cv2
face_classifier = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
# params for ShiTomasi corner detection
feature_params = dict( maxCorners = 200,
qualityLevel = 0.01,
minDistance = 10,
blockSize = 7 )
# Parameters for lucas kanade optical flow
lk_params = dict( winSize = (15,15),
maxLevel = 2,
criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))
# Create some random colors
color = np.random.randint(0,255,(100,3))
# Take first frame and find corners in it
ret, old_frame = cap.read()
cv2.imshow('Old_Frame', old_frame)
cv2.waitKey(0)
old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY)
restart = True
#while restart == True:
face = face_classifier.detectMultiScale(old_gray, 1.2, 4)
if len(face) == 0:
print "This is empty"
for (x,y,w,h) in face:
focused_face = old_frame[y: y+h, x: x+w]
cv2.imshow('Old_Frame', old_frame)
face_gray = cv2.cvtColor(old_frame,cv2.COLOR_BGR2GRAY)
gray = cv2.cvtColor(focused_face,cv2.COLOR_BGR2GRAY)
corners_t = cv2.goodFeaturesToTrack(gray, mask = None, **feature_params)
corners = np.int0(corners_t)
print corners
for i in corners:
ix,iy = i.ravel()
cv2.circle(focused_face,(ix,iy),3,255,-1)
cv2.circle(old_frame,(x+ix,y+iy),3,255,-1)
plt.imshow(old_frame),plt.show()
# Create a mask image for drawing purposes
mask = np.zeros_like(old_frame)
while(1):
ret,frame = cap.read()
frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# calculate optical flow
p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, corners_t, None, **lk_params)
# Select good points
good_new = p1[st==1]
good_old = corners_t[st==1]
# draw the tracks
print "COLORING TIME!"
for i,(new,old) in enumerate(Zip(good_new,good_old)):
print i
print color[i]
a,b = new.ravel()
c,d = old.ravel()
mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)
frame = cv2.circle(frame,(a, b),5,color[i].tolist(),-1)
if i == 99:
break
img = cv2.add(frame,mask)
cv2.imshow('frame',img)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
# Now update the previous frame and previous points
old_gray = frame_gray.copy()
p0 = good_new.reshape(-1,1,2)
cv2.destroyAllWindows()
cap.release()
このエラーメッセージ
エラー:(-215)関数imshowのsize.width> 0 && size.height> 0
単に、imshow()が入力デバイスからビデオフレームを取得していないことを意味します。あなたが使用してみることができます
cap = cv2.VideoCapture(1)
の代わりに
cap = cv2.VideoCapture(0)
&問題が引き続き発生するかどうかを確認します。
私は同じ問題を抱えており、キャプチャビデオのretを修正します
import numpy as np
import cv2
# Capture video from file
cap = cv2.VideoCapture('video1.avi')
while True:
ret, frame = cap.read()
if ret == True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(30) & 0xFF == ord('q'):
break
else:
break
cap.release()
cv2.destroyAllWindows()
遅らせる必要があります
サンプルコード:
import cv2
import numpy as np
import time
cam = cv2.VideoCapture(0)
time.sleep(2)
while True:
ret,frame = cam.read()
cv2.imshow('webcam', frame)
if cv2.waitKey(1)&0xFF == ord('q'):
break
cam.release()
cv2.destroyAllWindows()
また、この問題に直面し、画像のパスを変更することで解決します(パスに含まれている場合(たとえば、\ nまたは\ tまたは\ a)破損するので、すべてのバックスラッシュ「\」をフロントで変更してください-「/」をスラッシュすると、エラーは発生せず、パスの読み取りの問題のみが修正されます
次の2行で:
mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)
frame = cv2.circle(frame,(a, b),5,color[i].tolist(),-1)
代わりに試してください:
cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)
cv2.circle(frame,(a, b),5,color[i].tolist(),-1)
私は同じ問題を抱えていて、変数は空で返されていました
私もこの問題に出会いました。私の場合、画像のパスが間違っているため、読み込まれるimgはNoneType
です。イメージパスを修正した後、問題なく表示できます。
cv2.circle
およびcv2.lines
は機能していません。マスクとフレームの両方がNone
を返しています。これらの関数(線と円)はopencv 3にありますが、古いバージョンにはありません。
Sshを使用してリモートサーバーに接続し、pythonコードでcv2.VideoCapture(0)を実行してリモートウェブカメラをキャプチャすると、次のエラーメッセージが表示されます。
エラー:(-215)関数imshowのsize.width> 0 && size.height> 0
最後に、ユーザーアカウントで/ dev/video0(私のWebカメラデバイス)へのアクセスを許可する必要があり、エラーメッセージは消えました。 usermodを使用してユーザーをグループビデオに追加します
usermod -a -G video user
これは、スペースの消費または間違ったカメラの選択に関する問題です。カーネルを再起動して出力を消去し、再度実行するという私の提案。それで動作します。
Raspberry Pi 3でもエラーメッセージに出会ったが、私の解決策は、Googleで検索した後にカメラのカーネルをリロードすることです。
Sudo modprobe bcm2835-v4l2
ところで、このエラーについては、カメラとファイルパスが機能しているかどうかを確認してください
while(cap.isOpened()):
ret, img = cap.read()
print img
if img==None: #termino los frames?
break #si, entonces terminar programa
#gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('img2',img)
これは古いスレッドですが、私もこのエラーを受け取りました。私のために働いた解決策はここでは言及されていません。
簡単に言えば、私の場合、LEDライトが点灯しているのを見て、ウェブカメラはまだバックグラウンドで使用されていました。私はまだ問題を再現することができなかったので、単純なcv2.VideoCapture(0).release()
がそれを解決したかどうかはわかりません。この投稿を見つけた場合は、編集します。
私にとっては、PCを再起動することで、コードを変更せずに問題を解決できました。