Преобразование 12-битного байеровского изображения в 8-битное RGB с помощью OpenCV

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

10
задан Community 23 May 2017 в 12:24
поделиться