2017-10-20 30 views
2

私はPython 3とOpenCV 3を使用しています。トレーニングとテストのデータセットに同じサイズのイメージを使用するEigenFace Recognizerを使用しようとしています。私はウェブカメラから画像を読んで、画像サイズを200 x 200に変更しましたが、エラーが表示されます。Python OpenCV:イメージのサイズを変更できません

これは私のコードです:

faceDetect=cv2.CascadeClassifier('haarcascade_frontalface_default.xml') 
cam=cv2.VideoCapture(0); 
rec=cv2.face.EigenFaceRecognizer_create() 
#rec=cv2.face.LBPHFaceRecognizer_create() 
rec.read("recognizer/EigenData.xml") 
id=0 

fontFace = cv2.FONT_HERSHEY_SIMPLEX 
fontScale = 1 
fontColor = (0, 0, 255) 

while(True): 
    ret,img=cam.read(); 

    resize_img = img.resize((200,200) , img) 
    gray=cv2.cvtColor(resize_img,cv2.COLOR_BGR2GRAY) 
    faces=faceDetect.detectMultiScale(gray,1.3,5); 

    for(x,y,w,h) in faces: 

     cv2.rectangle(img,(x,y),(x+w, y+h), (0,255,0) , 2) 
     id, conf=rec.predict(gray[y:y+h, x:x+w]) #EigenFace Predict 
     cv2.putText(img,str(id),(x,y+h), fontFace, fontScale, fontColor,thickness=2) 

    cv2.imshow("Face", img); 
    if(cv2.waitKey(1)==ord('q')): 
     break; 

cam.release() 
cv2.destroyAllWindows() 

私が手にエラーがある:

resize_img = img.resize((200,200) , img) 
TypeError: 'tuple' object cannot be interpreted as an integer 

答えて

4

OpenCVのイメージを表現するための基本的なデータ型としてnumpyのアレイを使用しています。 NumPy配列にデータのサイズを変更する方法がresizeあると仮定しています。それは残念なことに真実ではありません。代わりにcv2.resizeを使用して画像のサイズを変更したいと思っています。その場合は、cv2.resizeに画像と目的の形状をタプルとして呼び出します。あなたはそれがほとんど正しい持っている - ちょうど引数の順序を入れ替える:

resize_image = cv2.resize(img, (200,200)) 

はまた、サイズ変更のデフォルトの方法は、バイリニア補間を使用することに注意してください取ります。別の方法を使用する場合は、追加の引数interpolationを指定する必要があります。あなたはキュービック補間を実行したい場合は、どうなる:

resize_image = cv2.resize(img, (200,200), interpolation=cv2.INTER_CUBIC) 

詳細はcv2.resize上のドキュメントを参照してください:https://docs.opencv.org/3.0-beta/modules/imgproc/doc/geometric_transformations.html#resize

+0

Downvoter - ケアあなたのdownvoteを説明するために? – rayryeng

+0

opencv 3.0ベータ版へのリンクが悪いです。 opencv 3.3 docsへのリンクを使用することをお勧めします – Miki

+0

@Miki oops。ありがとうございました。私は訂正します。 – rayryeng

関連する問題