简体   繁体   English

opencv函数cvcvtcolor和cvtcolor有什么区别

[英]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

  1. cvCvtColor is C API - deprecated . cvCvtColor是 C API不推荐使用的
  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM