use*_*633 3 python opencv image image-processing image-resizing
我正在使用Python 3和OpenCV 3.我正在尝试使用EigenFace Recognizer,它使用相同大小的图像进行训练和测试数据集.我从网络摄像头读取图像,并将图像调整为200 x 200,但显示错误.
这是我的代码:
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()
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
resize_img = img.resize((200,200) , img)
TypeError: 'tuple' object cannot be interpreted as an integer
Run Code Online (Sandbox Code Playgroud)
OpenCV使用NumPy数组作为表示图像的基本数据类型.事实上,NumPy有一种resize
"调整大小"数据的方法,但你没有正确使用它.通过查阅文档,该numpy.resize
方法要求您反转参数的顺序.首先输入数组,然后是所需的大小.你几乎正确 - 只需交换参数的顺序.
但是,我不相信这是你正在寻找的东西,因为numpy.resize
用输入的重复副本填充输出数组 - 特别是因为你这样做是为了面部识别.我相信你想要调整图像内容的大小以适应所需的大小,而不是用原始大小完整的输入的重复副本填充数组.
因此,cv2.resize
更适合您.你可以这样称呼它numpy.resize
:
resize_image = cv2.resize(img, (200,200))
Run Code Online (Sandbox Code Playgroud)
请注意,调整大小的默认方法使用双线性插值.如果要使用其他方法,则必须提供其他参数interpolation
才能执行此操作.如果你想进行三次插值,你会这样做:
resize_image = cv2.resize(img, (200,200), interpolation=cv2.INTER_CUBIC)
Run Code Online (Sandbox Code Playgroud)
有关cv2.resize
更多详细信息,请查看文档:https://docs.opencv.org/3.0-beta/modules/imgproc/doc/geometric_transformations.html#resize
归档时间: |
|
查看次数: |
5644 次 |
最近记录: |