报错一:[ WARN:0@0.051] 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就好了

 总结一下出现这些问题的最终原因还是编程习惯不好,要多注意规范操作

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐