WJSimilarPhotos icon indicating copy to clipboard operation
WJSimilarPhotos copied to clipboard

Invalid number of channels in input image: > 'VScn::contains(scn)' > where > 'scn' is 1

Open lk568999 opened this issue 3 years ago • 5 comments

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 avatar Jan 12 '22 01:01 lk568999

图像通道错了,灰度图一般是单通道,单通道:一个像素点只需一个数值表示,只能表示灰度

coderFrankenstain avatar Jan 14 '22 01:01 coderFrankenstain

👌🏻,解决了,感谢大佬

lk568999 avatar Jan 14 '22 08:01 lk568999

@lk568999 大佬,在哪里修改的啊😭

GrapeFruitJun avatar Jun 10 '22 14:06 GrapeFruitJun

@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;
}

大概思路是这样,你可以试试,不行再问

lk568999 avatar Jun 11 '22 01:06 lk568999

  • (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就行

Rudyy898 avatar Mar 16 '23 09:03 Rudyy898