在void cv :: cvtColor(cv :: InputArray,cv :: OutputArray,int,int),file /../Linux/./../src/中断言失败(scn == 3 || scn == 4) color.cpp,第8000行

时间:2017-12-28 11:20:00

标签: android c++ opencv

我正在尝试使用本机代码学习openCv,我正在参考here 我使用ndk-build成功构建了项目 现在我想在scan.cpp文件中进行更改,该文件负责获取图像点,裁剪图像,扫描图像并设置颜色。
我想为文件中的第321行给出不同的参数 cvtColor(mbgra,dst,CV_BGR2GRAY);
我可以为 CV_BGR2GRAY 提供任何其他论据 如果是的话?如果没有为什么?

请指导我,告诉我是否遗漏了什么。 谢谢。

1 个答案:

答案 0 :(得分:1)

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

如果您输入的是3通道BGR(即使它不是BGR,opencv也不关心),您可以使用任何3通道转换,例如CV_BGR2HSV,这将导致3通道HSV输出

如果您输入的是1个频道 - 那么您显然无法使用BGR 2 GRAY。

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

您可以查看所有可能的颜色转换here并详细了解它们here