博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cv2.error: OpenCV(3.4.2) c:\projects\opencv-python\opencv\modules\imgproc\src\color.hpp:25
阅读量:3889 次
发布时间:2019-05-23

本文共 2564 字,大约阅读时间需要 8 分钟。

cv2.error: OpenCV(3.4.2) c:\projects\opencv-python\opencv\modules\imgproc\src\color.hpp:253

最近刚开始学习python,涉及到了OpenCV模块,运行一个书上的程序出错了,原程序如下:

import cv2import numpy as npcap = cv2.VideoCapture('1.mp4')while True:    # 获取每一帧    ret, frame = cap.read()    # 转换到 HSV    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)    # 设定蓝色的阈值    lower_blue = np.array([110, 50, 50])    upper_blue = np.array([130, 255, 255])    # 根据阈值构建掩模    mask = cv2.inRange(hsv, lower_blue, upper_blue)    # 对原图像和掩模进行位运算    res = cv2.bitwise_and(frame, frame, mask=mask)    # 显示图像    cv2.imshow('frame', frame)    cv2.imshow('mask', mask)    cv2.imshow('res', res)    k = cv2.waitKey(5) & 0xFF    if k == 27:        break# 关闭窗口cv2.destroyAllWindows()

错误信息如下:

E:\python3.7.8\python.exe E:/1/PycharmProjects/opencv_test/color_transfer.pyTraceback (most recent call last):File "E:/1/PycharmProjects/opencv_test/color_transfer.py", line 29, in 
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)cv2.error: OpenCV(3.4.2) c:\projects\opencv-python\opencv\modules\imgproc\src\color.hpp:253: error: (-215:Assertion failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'cv::CvtHelper
,struct cv::Set<3,-1,-1>,struct cv::Set<0,5,-1>,2>::CvtHelper'Process finished with exit code 1
  1. 根据错误提示,是cv2.cvtColor函数的第一个参数frame出错了,其他的我看不出来了。
  2. 我返回检查了我的mp4文件以及调用的文件路径,没有问题。
  3. 再次运行程序,这次不等视频自己放完就按下Esc键结束,然后没有出现错误提示信息。
  4. 所以,说明是frame在循环过程中出错了。
    将程序简化,单独测试下循环和frame,程序和错误信息分别如下:
import cv2cap = cv2.VideoCapture('1.mp4')while True:    ret, frame = cap.read()    cv2.imshow('frame', frame)    k = cv2.waitKey(5) & 0xFF    if k == 27:        breakcv2.destroyAllWindows()
E:\python3.7.8\python.exe E:/1/PycharmProjects/opencv_test/test.pyTraceback (most recent call last):  File "E:/1/PycharmProjects/opencv_test/test.py", line 9, in 
cv2.imshow('frame', frame)cv2.error: OpenCV(3.4.2) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:356: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'Process finished with exit code 1

从错误信息可以看出,程序中frame最后没有满足imshow函数要求的size.width>0 && size.height>0,此时打印frame的值,发现frame是空的,我才突然恍然大悟,

猜测错误来源:while一直在循环,视频放完了它继续循环,frame获得值就是空的,而imshow和cv2.cvtColor函数引用到了空值,造成了参数的错误引用 ,然后程序非正常结束。
解决方法:控制frame的值,当frame为空时结束循环。在程序中while循环内frame下面加入如下if语句:

if frame is None:        break

检验结果

E:\python3.7.8\python.exe E:/1/PycharmProjects/opencv_test/test.pyProcess finished with exit code 0
E:\python3.7.8\python.exe E:/1/PycharmProjects/opencv_test/color_transfer.pyProcess finished with exit code 0

转载地址:http://lgihn.baihongyu.com/

你可能感兴趣的文章
《从Paxos到ZooKeeper分布式一致性原理与实践》学习知识导图
查看>>
Java基础面试题(一) (2020持续更新)
查看>>
JAVA人事管理系统
查看>>
Dubbo面试题(关注小R持续更新)
查看>>
JAVA仿微博系统(JAVA毕业设计含源码和运行教程)
查看>>
24BITBMP位图的文件结构及创建
查看>>
如何在自定义控件中获得width和height?
查看>>
Android UI开发专题之界面设计【基础API】
查看>>
ejarmaker: jar 、java类的加密工具
查看>>
配置NFS实现Linux服务器之间的文件共享
查看>>
PostgreSQL连接池pgbouncer的使用
查看>>
Kryo序列化进阶学习: 加密数据
查看>>
swift 3.0 数组赋值
查看>>
用C#通过888-TT打印中文标签
查看>>
sendmail 出现 My unqualified host name的解决办法
查看>>
彻底解决lazarus安装组件后烦人的编译时单元找不到的问题!
查看>>
Delphi的参数修饰const/var/output 与C++的对应关系
查看>>
C++ free与delete区别
查看>>
VC的字符串转换atlconv的使用
查看>>
Twitter的分布式自增ID算法snowflake (Java版)
查看>>