Я пытаюсь использовать OpenCV 2.3.1 для преобразования 12-разрядного изображения Bayer в 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-разрядных данных Bayer, я думал, что это достаточно различны, чтобы заслужить новый вопрос.
Спасибо заранее.
Изменить: мне что-то не хватает, потому что я не могу заставить функцию 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);