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

问题描述 投票:-1回答:1

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

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

android c++ opencv
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.