我是c ++编码的新手。你能告诉我opencv function cvcvtcolor和cvtcolor有什么区别?
谢谢
答案 0 :(得分:8)
除cvCvtColor
是cvtColor
的简单包装外,没有区别。
cvCvtColor
是C API - 已弃用。cvtColor
是C ++ API - 推荐。从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);
OpenCV 4.4.0上的cvCvtColor
cvtColor(inputMat, outputMat, CV_BGR2HSV);
最后,您必须知道cvCvtColor在OpenCV 4.4.0中已不存在,因为不推荐使用IplImage,而我们必须使用Mat,所以我想您将不得不使用cvtColor或坚持使用先前的版本3.4.3 >