未知函数中的断言失败
Posted
技术标签:
【中文标题】未知函数中的断言失败【英文标题】:Assertion failed in unknown function 【发布时间】:2013-04-12 12:58:51 【问题描述】:我正在使用这个程序来读取和显示图像。 我不知道为什么它会显示这个奇怪的错误:
assertion failed
(scn==3 || scn ==4)
in unknown function,file......\src\modules\imgproc\src\color.cpp line 3326
我更改了一些图像,有时它运行没有错误,但即使它运行和所有内容,它也显示窗口而不是其中的图像。怎么了?
#include "stdafx.h"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
using namespace std;
void main()
Mat leftImg,frame=imread("C:\\Users\\user\\Downloads\\stereo_progress.png");
leftImg=imread("C:\\Users\\user\\Downloads\\dm_sl.gif");//add of left camera
cvtColor(leftImg,leftImg,CV_BGR2GRAY);
imwrite("imreadtest.txt",leftImg);
imshow("cskldnsl",leftImg);
getchar();
【问题讨论】:
【参考方案1】:按照其他人的回答,请确保 cvtColor 中的参数 1 不是 1 通道图像。通过 type() 检查它。应该是CV_8UC3
等等。
将waitKey
放在imshow
之后。图像将显示出来。
我不知道您为什么将 leftImg 保存在 imreadtest.txt 中。 [虽然它没有犯错误。]
【讨论】:
thnx barshan 第二点成功了.. 但是我很困惑为什么 getchar() 会导致这个问题。【参考方案2】:首先,通过测试leftImg.data != 0
确保图像已正确加载。
然后,您可以通过将值 CV_LOAD_IMAGE_GRAYSCALE
或 CV_LOAD_IMAGE_COLOR
作为第二个参数传递给 cv::imread()
来强制通道数,以确保加载灰度(1 通道)或彩色(3 通道)图像,无论图像文件的类型是什么。
【讨论】:
【参考方案3】:在使用cvtColor()
时,您不能对输入矩阵和输出矩阵使用相同的矩阵。如果您以后不需要彩色图像,传递副本是一个简单的解决方案:
cvtColor(leftImg.clone(), leftImg, CV_BGR2GRAY);
另一种解决方案是使用新的输出矩阵:
Mat leftImgGray;
cvtColor(leftImg, leftImgGray, CV_BGR2GRAY);
imshow("cskldnsl",leftImgGray);
【讨论】:
亲爱的 Niko 感谢您的帮助,除此之外我还想补充一点,直到我翻新了 getchar() 并使用了 waitKEy 我无法获得图像窗口不会出现错误显示之后写的 couts imshow 也会被执行,但只有在删除 getchar() 时它才会完全消失任何提示 y 是这样吗? @AbhinavSRaiwaitKey()
是必需的,因为 OpenCV 仅在调用 waitKey()
时才处理 GUI 事件(例如创建/更新窗口)。见***.com/questions/5217519/opencv-cvwaitkey以上是关于未知函数中的断言失败的主要内容,如果未能解决你的问题,请参考以下文章
如何解决函数'resize'中的错误(-215:断言失败)!ssize.empty()?
CV4.1:函数detectAndCompute 级别>=0 中的断言失败