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

Android 在void cv::cvtColor(cv::InputArray,cv::OutputArray,int,int),file/./Linux/./src/color.cpp,第8000行,断言失败(scn==3 | | | scn==4),android,c++,opencv,Android,C++,Opencv,我正在尝试使用本机代码学习openCv,并从中获取参考。 我使用ndk build成功构建了项目。 现在我想对负责获取图像点、裁剪、扫描和设置颜色的文件进行更改。 我想为文件中的第321行提供不同的参数, CVT颜色(mbgra、dst、CV_bGR2灰色) 我可以为CV\u bgr2 gray提供任何其他参数吗 如果是,怎么做?如果没有,为什么 请引导我,如果我遗漏了什么,请告诉我。 谢谢。是的,你可以提出任何你想要的论点。你能得到合理的产量吗?视情况而定。CV_BGR2GRAY期望BGR(3

我正在尝试使用本机代码学习openCv,并从中获取参考。
我使用ndk build成功构建了项目。
现在我想对负责获取图像点、裁剪、扫描和设置颜色的文件进行更改。
我想为文件中的第321行提供不同的参数,
CVT颜色(mbgra、dst、CV_bGR2灰色)
我可以为CV\u bgr2 gray提供任何其他参数吗
如果是,怎么做?如果没有,为什么

请引导我,如果我遗漏了什么,请告诉我。
谢谢。

是的,你可以提出任何你想要的论点。你能得到合理的产量吗?视情况而定。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

你可以看到所有可能的颜色转换,并阅读更多关于它们的< /P>,你的问题似乎是C++。什么是标记C和java的原因,而不是C++?@允诺OOPS,我很抱歉,我现在非常沮丧,原因可能是…你能帮我回答这个问题吗?谢谢,但我不明白你说的。我已经写了Mat mbgra(info.height,info.width,CV_8UC4,pixels);//初始化输出图像Mat dst=mbgra.clone();CVT颜色(mbgra、dst、CV_bGR2灰色);在mat_to_bitmap()中,如果(info.format==ANDROID_bitmap_format_RGBA_8888){uuu ANDROID_log_print(ANDROID_log_VERBOSE,APPNAME,“ANDROID_bitmap_format_RGBA_8888”,i);mat tmp(info.height,info.width,CV_8UC4,pixels);如果(src.type()==CV_8UC1){cvtColor(src,tmp,CV GRAY2RGBA);但如果我写入CV_bgr2 gray**Mat mbgra(info.height,info.width,CV_8UC4,pixels)**则会产生错误;**意味着它的输入是通道4?如果src只有一个通道比cvtColor(src,tmp,CV_GRAY2RGBA)多;是正确的,因为GRAY2RGBA需要1个通道作为输入。如果您尝试使用1个通道src作为输入的BGR2GRAY-这显然是不正确的,因为BGR 2 gray需要3个通道作为输入(也可以接受4个通道输入).我怎么知道哪个色码需要哪个频道?你能提供链接/数据给我吗!好的,非常感谢我接受了你的回答,但我没有投票权:(