在未知函数中断言失败

Assertion failed in unknown function

本文关键字:断言 失败 中断 函数 未知      更新时间:2023-10-16

我正在使用这个程序来读取和显示图像。我不知道为什么显示这个奇怪的错误:

断言失败的(scn==3 || scn ==4)在未知的功能,文件......srcmodulesimgprocsrccolor.cpp行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中的parameter1不是1通道图像。按类型()检查。应该是CV_8UC3

  2. waitKey放在imshow后面。

  3. 我不知道为什么你在imreadtest.txt中保存leftImg。[虽然它没有出错]

首先,通过测试leftImg.data != 0来确保图像被正确加载。

然后,您可以通过将CV_LOAD_IMAGE_GRAYSCALECV_LOAD_IMAGE_COLOR作为第二个参数传递给cv::imread()来强制通道数,以确保您加载灰度(1通道)或彩色(3通道)图像,无论图像文件的类型是什么

使用cvtColor()时,不能对输入矩阵和输出矩阵使用相同的矩阵。如果您以后不需要彩色图像,传递一个副本是一个简单的解决方案:

cvtColor(leftImg.clone(), leftImg, CV_BGR2GRAY);

另一个解决方案是使用一个新的输出矩阵:

Mat leftImgGray;
cvtColor(leftImg, leftImgGray, CV_BGR2GRAY);
imshow("cskldnsl",leftImgGray);