opencv函数cvcvtcolor和cvtcolor有什么区别

时间:2014-12-24 02:46:24

标签: c++ opencv

我是c ++编码的新手。你能告诉我opencv function cvcvtcolor和cvtcolor有什么区别?

谢谢

4 个答案:

答案 0 :(得分:8)

cvCvtColorcvtColor的简单包装外,没有区别。

  1. cvCvtColor是C API - 已弃用
  2. cvtColor是C ++ API - 推荐
  3. 从opencv源代码(1),您可以看到C API cvCvtColor是C ++ cvtColor的包装器,可以执行RGB2GRAY等实际转换。

    CV_IMPL void cvCvtColor( const CvArr* srcarr, CvArr* dstarr, int code )
    {
        cv::Mat src = cv::cvarrToMat(srcarr), dst0 = cv::cvarrToMat(dstarr), dst = dst0;
        CV_Assert( src.depth() == dst.depth() );
    
        cv::cvtColor(src, dst, code, dst.channels());
        CV_Assert( dst.data == dst0.data );
    }
    

答案 1 :(得分:2)

C:void cvCvtColor(const CvArr * src,CvArr * dst,int code)

C ++:void cvtColor(InputArray src,OutputArray dst,int code,int dstCn = 0)

差别是,cvCvtColor属于旧的弃用的C API,而cv :: cvtColor属于当前的C ++ OpenCV API。尽可能多地使用cv命名空间以避免使用遗留代码。

答案 2 :(得分:2)

They're equivalent,但cvtcolor除外是C ++ API和cvCvtColor C API。

如果您使用C ++,则只需关注并建议使用cvtcolor

答案 3 :(得分:0)

cvCvtColor输入和输出参数是cvArray参考图像,也称为“ IplImage”

语法:cvCvtColor(CvArr * src,CvArr * dst,int code)

另一方面,

cvtColor使用InputArray图像(又称“垫子”)

语法:cvtColor(InputArray src,OutputArray dst,int code)

请注意,cvArray(IplImage)是图像的引用地址,而InputArray(Mat)是实际图像。

作为一项实际测试,我尝试使用int代码= CV_BGR2HSV进行测试,令人惊讶的是,输出太不同了,两者都在相同的环境(霓虹灯白平衡)下进行了测试。

OpenCV 3.4.3上的cvCvtColor

cvCvtColor(inputIplImage, outputIplImage, CV_BGR2HSV);

enter image description here

OpenCV 4.4.0上的cvCvtColor

cvtColor(inputMat, outputMat, CV_BGR2HSV);

enter image description here

最后,您必须知道cvCvtColor在OpenCV 4.4.0中已不存在,因为不推荐使用IplImage,而我们必须使用Mat,所以我想您将不得不使用cvtColor或坚持使用先前的版本3.4.3