断言失败(scn == 3 || scn == 4)void cv :: cvtcolor(cv :: inputArr

Assertion failed (scn == 3 || scn == 4) in void cv::cvtColor(cv::InputArray, cv::OutputArray, int, int), file /../Linux/./../src/color.cpp, line 8000

本文关键字:cv scn 失败 cvtcolor inputArr 断言 void      更新时间:2023-10-16

我正在尝试用本机代码学习openCV,我正在这里进行参考。
我成功地使用NDK-Build构建了该项目。
现在,我想在scan.cpp文件中进行更改,该文件负责获取图像点,裁剪,扫描并设置颜色。
我想对文件中的第321行给出不同的论点
cvtcolor(MBGRA,DST,CV_BGR2GRAY);
我可以给出任何其他论点 cv_bgr2gray
如果是的话?如果没有?

请指导我,告诉我是否缺少任何东西。谢谢。

是的,您可以提供任何想要的参数。您会得到合理的输出吗?这取决于。CV_BGR2GRAY期望BGR(3通道)输入,并将输出灰色(1个通道)。

如果输入为3频道BGR(即使不是真正的BGR,OpenCV也不会关心),则可以使用任何3个通道转换,例如CV_BGR2HSV,这将导致3频道HSV输出。

如果您的输入是1个通道 - 显然无法使用BGR 2灰色。

Mat bgraImage = imread("BGRA_IMAGE.png", -1);  // 4 channel input image
Mat grayImage = imread("GRAY_IMAGE.png", CV_LOAD_IMAGE_GRAYSCALE);  // 1 channel input image
Mat result;
cvtColor(bgraImage, result, CV_BGRA2GRAY);    // CORRECT, input 4 channel, output will be 1 channel
cvtColor(bgraImage, result, CV_BGR2GRAY);    // ALSO CORRECT
cvtColor(grayImage, result, CV_BGR2GRAY);    // INCORRECT & will crash, input is 1 channel, expecting 3 or 4
cvtColor(grayImage, result, CV_GRAY2BGR);    // CORRECT, input is 1 channel, output is 3 channel

您可以在此处看到所有可能的颜色转换,并在此处阅读有关它们的更多信息