Я пытаюсь использовать 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);