WJSimilarPhotos
WJSimilarPhotos copied to clipboard
Invalid number of channels in input image: > 'VScn::contains(scn)' > where > 'scn' is 1
OpenCV(4.3.0) /Volumes/build-storage/build/master_iOS-mac/opencv/modules/imgproc/src/color.simd_helpers.hpp:92: error: (-2:Unspecified error) in function 'cv::impl::(anonymous namespace)::CvtHelper<cv::impl::(anonymous namespace)::Set<3, 4, -1>, cv::impl::(anonymous namespace)::Set<1, -1, -1>, cv::impl::(anonymous namespace)::Set<0, 2, 5>, cv::impl::(anonymous namespace)::NONE>::CvtHelper(cv::InputArray, cv::OutputArray, int) [VScn = cv::impl::(anonymous namespace)::Set<3, 4, -1>, VDcn = cv::impl::(anonymous namespace)::Set<1, -1, -1>, VDepth = cv::impl::(anonymous namespace)::Set<0, 2, 5>, sizePolicy = cv::impl::(anonymous namespace)::NONE]' > Invalid number of channels in input image: > 'VScn::contains(scn)' > where > 'scn' is 1 大佬,这个问题怎么解决
图像通道错了,灰度图一般是单通道,单通道:一个像素点只需一个数值表示,只能表示灰度
👌🏻,解决了,感谢大佬
@lk568999 大佬,在哪里修改的啊😭
@GrapeFruitJun 时间太久,我都忘记了,好像是要先判断是否单通道,有些图片本身就是灰度图,如果再次灰度,就会报错。
好像是在这改的,在 AMCompare.m 中
- (Mat) rgbToGray:(Mat) rgbMat
{
if (rgbMat.channels() == 1) {
return rgbMat;
}
//第二步:将C++的彩色图片转成灰度图片
//参数1:数据源(原图片)
//参数2:目标数据(目标图片)
//参数3:转换类型(图片格式)
//COLOR_BGR2GRAY :将彩色图片转成灰度图片
Mat mat_image_dst;
cvtColor(rgbMat, mat_image_dst, COLOR_BGR2GRAY);
// cvtColor(mat_image_dst, mat_image_dst, COLOR_BGR2GRAY);
return mat_image_dst;
}
大概思路是这样,你可以试试,不行再问
-
(BOOL) histogramCompare { // :(Mat) base andMat:(Mat) compare Mat base = originMat; Mat compare = compareMat;
if(base.channels()==1) { Mat mat_image_dst; cvtColor(base, mat_image_dst, COLOR_GRAY2BGR); base = mat_image_dst; } if(compare.channels()==1) { Mat mat_image_dst; cvtColor(compare, mat_image_dst, COLOR_GRAY2BGR); compare = mat_image_dst; } } 这里加一个把单通道的灰度转回brg就行