我試圖使用OpenCV 2.3.1將12位拜耳圖像轉換爲8位RGB圖像。這似乎是它應該使用cvCvtColor功能是相當簡單,但功能拋出時,我把它叫做這個代碼的異常:使用OpenCV將12位拜耳圖像轉換爲8位RGB
int cvType = CV_MAKETYPE(CV_16U, 1);
cv::Mat bayerSource(height, width, cvType, sourceBuffer);
cv::Mat rgbDest(height, width, CV_8UC3);
cvCvtColor(&bayerSource, &rgbDest, CV_BayerBG2RGB);
我以爲我跑過去sourceBuffer結束,由於輸入數據是12位的,我不得不通過16位類型,因爲OpenCV沒有12位類型。所以我把寬度和高度除以2,但cvCvtColor仍然拋出一個沒有任何有用信息的異常(錯誤信息是「未知異常」)。
有一個similar question幾個月前發佈,這是從來沒有回答,但由於我的問題更具體地處理12位拜耳數據,我認爲這是非常明顯的值得一個新的問題。
在此先感謝。
編輯:我一定是失去了一些東西,因爲我甚至無法獲得cvCvtColor的函數,在8位數據的工作:
cv::Mat srcMat(100, 100, CV_8UC3);
const cv::Scalar val(255,0,0);
srcMat.setTo(val);
cv::Mat destMat(100, 100, CV_8UC3);
cvCvtColor(&srcMat, &destMat, CV_RGB2BGR);
所以,事實證明,我*爲*失去了一些東西。我的同事指出我正在混合使用C和C++調用。將最後一行更改爲 cv :: cvtColor(srcMat,destMat,CV_RGB2BGR); 使一切工作像一個魅力。我仍在研究將16位拜耳數據轉換爲8位RGB數據的原始問題,因此如果我找到了答案,我會發布更新。 – Gillfish
'cvCvtColor'屬於舊的C OpenCV API,但'cv :: Mat'是C++ API中的一個類。混合它們不是一個好主意,你最好只使用一個版本的API。 'cv :: cvtColor(srcMat,dstMat,COLOR_RGB2BGR)'應該適合你。 –
「綠色過濾器外觀」可能意味着您指定了錯誤的拜耳模式。嘗試一切。 – user3443369