报错一:[ WARN:[email protected]] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp (239) cv::findDecoder imread_('image/赵.png'): can't open/read file: check file path/integrity
Traceback (most recent call last):
import cv2
# 人脸识别规矩:
# 1.不要选模糊不清的
# 2.尽量挑选正脸照片,侧脸需要训练
def readImg():
# 读取照片
img=cv2.imread("image/zhao.png")
# 三维数组
print(img.shape)
cv2.imshow("赵丽颖",img)
readImg()
解决方案:使用 cv2.imread() 读取图片,怎么也打不开,报的都是nonetype,最后发现原来cv2这个函数只支持全英文路径
报错二:cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'
print("识别图片中人脸")
import cv2
def showFace():
img=cv2.imread("cc/8.jpeg")
# 导入人脸特征数据包
faceData=cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")
img=cv2.resize(img,None,fx=1,fy=1)
# 对图片进行人脸数据对比
# scaleFactor缩放因子,默认值1.3,值越大,扫描越粗糙,越容易忽略
# 扫描时间会短,值越小,会越精致,执行时间会比较长
# 缩放因子必须大于1
# minNeighbors最小邻居值,默认值3,值越大,越苛刻
faces=faceData.detectMultiScale(img,scaleFactor=1.04,minNeighbors=4)
# 数组[1,2,3]可以修改 元组(1,2,3)不可修改
# 检测成功,找到人脸,返回人脸数据,如果没有人脸,返回一个空元组
# [[242 123 402 402]]x,y,w,h
print(faces)
for x,y,w,h in faces:
# 三原色像素BGR
# rectangle(绘制对象图片,pt1=左上角,pt2=右下角,color=线条颜色,thickness=线条粗细)
cv2.rectangle(img,pt1=(x,y),pt2=(x+w,y+h),color=[0,0,255],thickness=2)
cv2.imshow("ma",img)
cv2.waitKey()
cv2.destroyAllWindows()
showFace()
解决方案:给项目文件夹下导入haarcascade_frontalface_alt.xml就好了
haarcascade_frontalface_alt.xml的查找方式:在你安装python的环境下如下图依次查找:
……\Lib\site-packages\cv2\data\haarcascade_frontalface_alt.xml就好了
总结一下出现这些问题的最终原因还是编程习惯不好,要多注意规范操作