我正在尝试使用 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);
我以为我跑过了 sourceBuffer 的末尾,因为输入数据是 12 位的,我必须传入 16 位类型,因为 OpenCV 没有 12 位类型。所以我将宽度和高度除以 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);