OpenCV 2.3.1を使用して、12ビットのベイヤー画像を8ビットのRGB画像に変換しようとしています。これは、cvCvtColor関数を使用するとかなり簡単なはずですが、次のコードで呼び出すと、関数は例外をスローします。
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);
入力データが12ビットであるため、sourceBufferの終わりを超えて実行していると思いました。また、OpenCVには12ビット型がないため、16ビット型を渡す必要がありました。そこで、幅と高さを2で割りましたが、cvCvtColorは、有用な情報が含まれていない例外をスローしました(エラーメッセージは「不明な例外」でした)。
数ヶ月前に投稿された同様の質問には答えられませんでしたが、私の質問はより具体的に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);