未知函数中的断言失败

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_GRAYSCALECV_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 是这样吗? @AbhinavSRai waitKey() 是必需的,因为 OpenCV 仅在调用 waitKey() 时才处理 GUI 事件(例如创建/更新窗口)。见***.com/questions/5217519/opencv-cvwaitkey

以上是关于未知函数中的断言失败的主要内容,如果未能解决你的问题,请参考以下文章

如何解决函数'resize'中的错误(-215:断言失败)!ssize.empty()?

使用 MPI 修改函数中的 boost 数组导致断言失败

CV4.1:函数detectAndCompute 级别>=0 中的断言失败

调试断言失败(缓冲区太小)构造函数初始化

带有 endItemAnimations 的 UICollectionView 中的断言失败

Gtest学习系列三:断言