2013-09-26 89 views
4

我正在使用OpenCV 2.4.6。我正試圖將4通道RGB IplImage轉換爲4通道HSV圖像。以下是我的代碼。哪個給出錯誤「OpenCV錯誤:斷言未知功能失敗」。我認爲cvCvtColor支持3通道圖像。有沒有辦法將4通道RGB轉換爲HSV或4通道RGB轉換爲3通道RGB?將4通道圖像轉換爲3通道圖像

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 

回答

6

通常的假設是第4個通道是一個阿爾法(A)通道。因此,正確的轉換的代碼是:

cvCvtColor(mCVImageColor, imgHSV, CV_BGRA2HSV); 

通知的BGRA

此外,我想你的語法(mCVImage ...),你使用的是C++。那麼,爲什麼不使用OpenCV的C++ API呢? 如果您選擇使用C++,文檔仍然過時,您可以找到最新的OpenCV 2.4.6 here的顏色轉換代碼。

對於您的情況,正確的顏色轉換代碼(C++)是:cv::COLOR_BGRA2HSV。但是如果您使用的是C++ API,那麼您應該使用cv::Mat對象並調用功能cv::cvtColor(...)而不是使用IplaImagecv前綴函數。

+1

我現在正在做這個..但仍然cv :: COLOR_BGRA2HSV是未定義mat b(mCVImageColor); Mat matHSV(mCVImageColor); cv :: cvtColor(b,matHSV,cv :: COLOR_BGRA2HSV); – Tonmoy

+0

但我已經找到COLOR_BGRA2BRG.after,我可以做BGR2HSV。輸出是否與COLOR_BGRA2HSV相同? – Tonmoy

+0

您可以使用直接編碼(BGRA ---> HSV)或按步驟執行(BFRA ---> BGR ---> HSV)。除此之外,結果將是相同的(OpenCV忽略alpha通道)。 – sansuiso

2

使用OpenCV 3.1,我遇到了這個問題,但sansuiso的回答並不適合我。

相反,我用下面的命令去轉換來自4通道顏色(RGBA)至3頻道色彩(RGB):

cvtColor(inputMat, outputMat, CV_BGRA2BGR); 

然後,我驗證了channels()對於每種類型的,並且能確認alpha通道已被剝離,並且我的功能正常工作,需要三個通道圖像。

相關問題