CV2(cv2.imwrite)- Python 不断抛出“断言失败”错误

Posted

技术标签:

【中文标题】CV2(cv2.imwrite)- Python 不断抛出“断言失败”错误【英文标题】:CV2(cv2.imwrite)- Python keeps throwing an, "Assertion failed," error 【发布时间】:2017-09-08 03:49:24 【问题描述】:

所以,如果我离开,我会不断收到“断言失败”错误,

        cv2.imwrite('FaceRecBaseTest/' + str(sum) + '.jpeg', vid, gray[y:y+h, x:x+w])

所以,很自然,我来这里是为了找出原因。这是其完整的“荣耀”中的错误:

OpenCV 错误:断言失败 (dims == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0)) 在创建中,文件 /tmp/opencv-20170224-1869-10nlf6f/opencv-2.4.13.2/modules/core/src/matrix.cpp,第 1466 行 libc++abi.dylib:以 cv::Exception 类型的未捕获异常终止:/tmp/opencv-20170224-1869-10nlf6f/opencv-2.4.13.2/modules/core/src/matrix.cpp:1466:错误:( -215) dims == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0) 在函数创建中

这是我的代码的副本:

import cv2
import time
face_cascade = cv2. 
CascadeClassifier('haarcascade/haarcascade_frontalface_alt.xml')
video_capture = cv2.VideoCapture(0)
sum = 0
while True:
    # Captures video frame by frame
    ret, vid = video_capture.read()
    vid = cv2.resize(vid, (320, 220))
    gray = cv2.cvtColor(vid, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.1, 5)

    print str(len(faces))
    # Draw a rectangle around the faces
    for (x, y, w, h) in faces:
        sum += 1
        cv2.rectangle(vid, (x, y), (x+w, y+h), (0, 255, 0), 2)
        cv2.imwrite('FaceRecBaseTest/' + str(sum) + '.jpeg', vid, gray[y:y+h, x:x+w])
        cv2.waitKey(1)
    cv2.putText(vid, "Video: " + str(time.ctime()), (0, 10), 
    cv2.FONT_HERSHEY_PLAIN, 1, (0, 0, 255), 2, 8, bottomLeftOrigin = False)
    # Display the results
    if sum > 20:
        break
    cv2.imshow('Video', vid)
    cv2.waitKey(1)
video_capture.release()
cv2.destroyAllWindows()

【问题讨论】:

imwrite 函数中有三个参数:文件名、vidgray[y:y+h, x:x+w]。你到底想在这里做什么?当然,您一次只能写入一张图像,因此只有一个文件名。正确用法是imwrite(filename, image) ...你有没有在编码的时候感觉自己像个混蛋?因为我完全做到了。谢谢你。我完全忽略了这一点!我本来打算写的,cv2.imwrite("FaceRecBaseTest/" + str(sum) + ".jpeg", gray[y:y+h, x:x+w]) 谢谢!我现在可以工作了...! 大声笑,当然,我们都这样做。我已将其添加为答案。 【参考方案1】:

imwrite() 中有三个参数:文件名和两个图像(vidgray[y:y+h, x:x+w])。当然,您只能传入一张图像。但是imwrite() 实际上可以接受三个参数,第三个是质量/压缩级别的参数标志。来自the imwrite() docs:

Pythoncv2.imwrite(filename, img[, params]) → retval ...params – 格式特定的保存参数编码为对 paramId_1、paramValue_1、paramId_2、paramValue_2、...。目前支持以下参数:

【讨论】:

以上是关于CV2(cv2.imwrite)- Python 不断抛出“断言失败”错误的主要内容,如果未能解决你的问题,请参考以下文章

Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()

cv2.imwrite() 没有将时间戳写入帧

cv2.rectangle()、cv2.putText()和cv2.imwrite()用法

OpenCV Python:如何避免 py3 中的 cv2.imwrite() 内存“泄漏”?

cv2 imwrite 和德语字母(“ä, ü, ö”)

OpenCV 函数学习02-图像的保存(cv2.imwrite)