我正在使用 OpenCV 2.4.6。我正在尝试将 4 channel RGB IplImage 转换为 4 channel HSV 图像。下面是我的代码。这给出了错误“OpenCV 错误:断言在未知函数中失败”。我认为 cvCvtColor 支持 3 channel 图像。有什么方法可以将 4 channel RGB 转换为 HSV 或将 4 channel RGB 转换为 3 channel 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
最佳答案
通常假设第 4 个 channel 是 alpha (A) channel 。因此,正确的转换代码是:
cvCvtColor(mCVImageColor, imgHSV, CV_BGRA2HSV);
注意 BGRA 中的 A。
此外,根据您的语法 (mCVImage...),我猜您正在使用 C++。那么,为什么不使用 OpenCV 的 C++ API 呢? 如果您选择使用 C++,文档仍然过时,您可以找到 OpenCV 2.4.6 的最新颜色转换代码 here .
对于您的情况,正确的颜色转换代码 (C++) 是:cv::COLOR_BGRA2HSV
。但是,如果您使用的是 C++ API,那么您应该使用 cv::Mat
对象并调用函数 cv::cvtColor(...)
而不是使用 IplaImage
和 cv
前缀函数。
关于opencv - 将 4 channel 图像转换为 3 channel 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19028830/