总结:terminate called after throwing an instance of ‘cv::Exception‘ what(): OpenCV(4.5.2) 类问题解决方法

绪论

        我们在使用opencv函数接口时经常会遇到一些奇奇怪怪的问题,让我们一时无法确定问题的原由。最近我在Linux下使用opencv函数接口时又遇到了一个报错,觉得很有意思,遂写此文,望帮助到广大同样遇到此问题的网友。

1.问题重现

        我本次使用Linux下qt编译工程并调用opencv函数接口,此次遇到的问题报错为:terminate called after throwing an instance of 'cv::Exception' what():  OpenCV(4.5.2) /homenux/tools/OpenCV/opencv4.5.2/modules/imgprocc/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'。起初看报错显示图片输入数据为空,可是我检查我的代码中并未用到读取图片的函数,只是用到了VideoCapture()函数,为此我检查了思来想去,检查了qt的pro文件中的所有文件路径并确认无问题,在查找相关资料终于解决了该问题,并将该类问题分为两种情况同时做了总结。

2.解决方案

2.1 使用了opencv中的imread()函数

        在使用了imread()函数发生“terminate called after throwing an instance of ‘cv::Exception”报错,在检查其他环境变量路径都正确后,需要检查所读取的图片路径,防止出错可选择绝对路径,同时把imread(“**.jpg”,0);改成imread(“**.jpg”);  即可规避此类型错误。

2.2 使用了opencv中的VideoCppture()函数

        在使用该函数时如果路径不对也会产生“terminate called after throwing an instance of ‘cv::Exception”,Windows下解决方法与上面相同,不再赘述。不过在Linux下还需注意以下情况。

        虽然有时路径正确了,但是依然会报错,这是需要打开相机查看是否正常。

图1 Linux下相机异常

        如果打开相机发现显示“未发现设备”,则需要依次点击“虚拟机” ->“可移动设备”->“Realtek Integrated_Webcam_HD ”->“断开与主机连接”,如下图所示。

图2 

如果还是未发现设备,则需要进行如下操作:“虚拟机”->“设置”->“USB控制器”,将USB2.1改成USB3.1或将USB3.1改成USB2.1.

图3

        再次查看,必将一切正常!!!!!!!

图4 一切正常

总结

        在软件开发或学习中,我们总会遇到各式各样的问题,在遇到这些问题的时候我们需要冷静应对,从问题本身出发,从而达到解决为题的目的。很多时候只要我们解决问题的思路清晰并坚持不懈,问题最终总能被解决。最后祝大家都能成为技术大牛,快乐地敲代码~

猜你喜欢

转载自blog.csdn.net/m0_70788037/article/details/139495930