[英]What is the difference between opencv function cvcvtcolor and cvtcolor
I am new to c++ coding .我是 C++ 编码的新手。 can you tell me what is the difference between opencv function cvcvtcolor and cvtcolor ?你能告诉我 opencv 函数 cvcvtcolor 和 cvtcolor 有什么区别吗?
Thank you谢谢
There is no difference except that cvCvtColor
is a simple wrapper for cvtColor
.有不同之处在于没有区别cvCvtColor
是一个简单的包装cvtColor
。
cvCvtColor
is C API - deprecated . cvCvtColor
是 C API不推荐使用的。cvtColor
is C++ API - recommended . cvtColor
是 C++ API -推荐。 From opencv source (1) you can see that the C API cvCvtColor
is wrapper around the C++ cvtColor
which does actual conversions like RGB2GRAY
etc.从 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 );
}
C: void cvCvtColor(const CvArr* src, CvArr* dst, int code) C: void cvCvtColor(const CvArr* src, CvArr* dst, int 代码)
C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 ) C++: void cvtColor(InputArray src, OutputArray dst, int 代码, int dstCn=0 )
That's the difference, cvCvtColor belongs to the old deprecated C API whereas cv::cvtColor belongs to the current C++ OpenCV API.这就是区别,cvCvtColor 属于旧的已弃用的 C API,而 cv::cvtColor 属于当前的 C++ OpenCV API。 Make use of the cv namespace as much as possible to avoid using legacy code.尽可能多地使用 cv 命名空间以避免使用遗留代码。
They're equivalent , except cvtcolor
is the C++ API and cvCvtColor
C API. 它们是等效的,除了cvtcolor
是 C++ API 和cvCvtColor
C API。
If you use C++, you only need to care about and are also recommend to use cvtcolor
.如果你使用 C++,你只需要关心并推荐使用cvtcolor
。
cvCvtColor inputs and outputs parameters is cvArray reference image aka "IplImage" cvCvtColor 输入和输出参数是 cvArray 参考图像又名“IplImage”
Syntax: cvCvtColor(CvArr *src, CvArr *dst, int code)语法:cvCvtColor(CvArr *src, CvArr *dst, int code)
cvtColor on the other hand using InputArray images aka "Mat"另一方面,cvtColor 使用 InputArray 图像又名“Mat”
Syntax: cvtColor(InputArray src, OutputArray dst, int code)语法:cvtColor(InputArray src, OutputArray dst, int code)
Notice that cvArray (IplImage) is a reference address to the image, While InputArray (Mat) is the actual image.请注意,cvArray (IplImage) 是图像的引用地址,而 InputArray (Mat) 是实际图像。
As a practical test i have tried both with int code = CV_BGR2HSV, Surprisingly the output was too different, Both tested at same environment (Neon-light White Balance).作为实际测试,我已经尝试了 int code = CV_BGR2HSV,但令人惊讶的是输出差异太大,两者都在相同的环境(霓虹灯白平衡)下进行了测试。
cvCvtColor on OpenCV 3.4.3 OpenCV 3.4.3 上的 cvCvtColor
cvCvtColor(inputIplImage, outputIplImage, CV_BGR2HSV);
cvCvtColor on OpenCV 4.4.0 OpenCV 4.4.0 上的 cvCvtColor
cvtColor(inputMat, outputMat, CV_BGR2HSV);
Finally you have to know that cvCvtColor Not exist anymore in OpenCV 4.4.0 as IplImage is deprecated and we have to use Mat instead, So I guess you will have to use cvtColor or Stick to the previous version 3.4.3最后,您必须知道 cvCvtColor 在 OpenCV 4.4.0 中不再存在,因为 IplImage 已被弃用,我们必须使用 Mat 代替,所以我想您将不得不使用 cvtColor 或坚持使用以前的版本 3.4.3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.