将4通道图像转换为3通道图像

Ton*_*moy 7 opencv

我正在使用OpenCV 2.4.6.我正在尝试将4通道RGB IplImage转换为4通道HSV图像.以下是我的代码.哪个给出错误"OpenCV错误:断言在未知函数中失败".我认为cvCvtColor支持3channel图像.有没有办法将4通道RGB转换为HSV或4通道RGB转换为3通道RGB?

 IplImage*  mCVImageColor = cvCreateImageHeader(cvSize(640,480), IPL_DEPTH_8U, 4);
 /*Doing something*/
 IplImage* imgHSV = cvCreateImage(cvGetSize(mCVImageColor), IPL_DEPTH_8U, 4);
 cvCvtColor(mCVImageColor, imgHSV, CV_BGR2HSV); //This line throws exception
Run Code Online (Sandbox Code Playgroud)

san*_*iso 8

常见的假设是第4个通道是alpha(A)通道.因此,正确的转换代码是:

cvCvtColor(mCVImageColor, imgHSV, CV_BGRA2HSV);
Run Code Online (Sandbox Code Playgroud)

注意一个BGRA.

另外,我猜你从语法(mCVImage ...)开始使用C++.那么,为什么不使用OpenCV的C++ API呢?如果您选择使用C++,文档仍然过时,您可以在此处找到OpenCV 2.4.6的最新颜色转换代码.

对于您的情况,正确的颜色转换代码(C++)是:cv::COLOR_BGRA2HSV.但是如果你使用的是C++ API,那么你应该使用cv::Mat对象并调用函数cv::cvtColor(...)而不是使用IplaImage's和cv前缀函数.


Cod*_*der 7

使用 OpenCV 3.1,我遇到了这个问题,但 sansuiso 的答案对我不起作用。

相反,我使用以下命令将 4 通道颜色 (RGBA) 转换为 3 通道颜色 (RGB):

cvtColor(inputMat, outputMat, CV_BGRA2BGR);
Run Code Online (Sandbox Code Playgroud)

之后,我验证了channels()每种类型的 ,并能够确认 alpha 通道已被剥离,并且我的功能正常工作,需要三个通道图像。