C++ OpenCV错误:断言失败。怎么办?

C++ OpenCV错误:断言失败。怎么办?,c++,opencv,C++,Opencv,当我启动一个程序时-我得到以下错误: OpenCV错误:cv::cvtColor文件C:\builds\2\u 4\u PackSlave-win64-vc12-shared\OpenCV\modules\imgproc\src\color.cpp第3737行中的断言失败(scn==3 | | scn==4) 如何删除错误? 代码: #包括“opencv2/core/core.hpp” #包括“opencv2/contrib/contrib.hpp” #包括“opencv2/highgui/hi

当我启动一个程序时-我得到以下错误:

OpenCV错误:cv::cvtColor文件C:\builds\2\u 4\u PackSlave-win64-vc12-shared\OpenCV\modules\imgproc\src\color.cpp第3737行中的断言失败(scn==3 | | scn==4)

如何删除错误? 代码:

#包括“opencv2/core/core.hpp”
#包括“opencv2/contrib/contrib.hpp”
#包括“opencv2/highgui/highgui.hpp”
#包括“opencv2/imgproc/imgproc.hpp”
#包括“opencv2/objdetect/objdetect.hpp”
#包括
#包括
#包括
使用名称空间cv;
使用名称空间std;
静态void read_csv(常量字符串和文件名、向量和图像、向量和标签、字符分隔符=“;”){
std::ifstream文件(filename.c_str(),ifstream::in);
如果(!文件){
字符串错误\u message=“未提供有效的输入文件,请检查给定的文件名。”;
CV_错误(CV_StsBadArg,错误消息);
}
字符串行、路径、类标签;
while(getline(文件,行)){
细度(线);
getline(路径、分隔符);
getline(名称、类别标签);
如果(!path.empty()&&!classlabel.empty()){
图像。推回(imread(路径,0));
labels.push_back(atoi(classlabel.c_str());
}
}
}
int main(int argc,const char*argv[]{
//检查有效的命令行参数、打印使用情况
//如果没有给出任何论据。
如果(argc!=4){
无法预测(面大小调整);
//最后把我们发现的一切写在原始图像上!
//首先,在检测到的面周围绘制一个绿色矩形:
矩形(原始、面、CV、RGB(0、255、0)、1);
//创建文本,我们将使用以下内容对框进行注释:
字符串框\文本=格式(“预测=%d”,预测);
//计算带注释文本的位置(确保我们没有
//在其中输入非法值):
int pos_x=std::max(face_i.tl().x-10,0);
int pos_y=std::max(face_i.tl().y-10,0);
//现在把它放到图片中:
putText(原始、框体、点(位置x、位置y)、字体、字体、1.0、CV、RGB(0、255、0)、2.0);
}
//显示结果:
imshow(“人脸识别器”,原件);
//并显示:
char key=(char)waitKey(20);
//在退出时退出此循环:
如果(键==27)
打破
}
返回0;
}

错误表示您试图转换为灰度的图像没有颜色通道

尝试更换
CVT颜色(原色、灰色、CV_bgr2灰色)通过以下方式:

if(original.empty())
    break;
else if(original.channels()>1)
    cvtColor(original, gray, CV_BGR2GRAY);
else gray = original;

程序“[8124]opencv2.exe”已退出,代码为1(0x1)。调试时。如果启动这个程序-它会让你澄清什么不起作用?程序根本不启动你确定视频捕获被正确加载了吗?这是一个openCV示例,所以我认为-是的
if(original.empty())
    break;
else if(original.channels()>1)
    cvtColor(original, gray, CV_BGR2GRAY);
else gray = original;