2014-01-07 4 views
2

В настоящее время я пытаюсь преобразовать данные Bayer RGGB в iplimage. Я думал, что cvtColor может работать, но для него требуется «mat» вместо iplimage.Convert Bayer RGGB to CV iplimage (RGB)

cvtColor(img->imageData, tmpimageData, CV_BayerBG2BGR, 0); 

Есть обходной путь, может быть, вы можете конвертировать Bayer RGGB матировать, а затем преобразовать мат в IplImage? Я действительно застрял в этой проблеме, любая помощь очень ценится!

ответ

1

OpenCV может легко конвертировать между Mat и Iplimage. Например, если img является IplImage*:

Mat m(img); 
Mat result; 
cvtColor(m, result, CV_BayerBG2BGR, 0); 
IplImage ipl_result = IplImage(result); 

См Mat::Mat(const IplImage* img, bool copyData=false) и Mat::operator IplImage()

+0

Ну, это очень полезно. ^^ Я думаю, я могу снова использовать img, и вам не нужно создавать новый IplImage «ipl_result»! – Guntram

0

К сожалению, я не понять, почему cvtColor не работал, но тем не менее я нашел, почему конвертировать BayerRGGB в RGB с мой SDK.

Оказалось, что матричный вид sdk, с которым я работал, предоставил встроенное решение. Первое, что мне нужно было сделать, это изменить PixelFormat на BayerRG8, чтобы получить разрешение 8 бит. После этого мне удалось декодировать Bayer RGGB в RGB, написав idpfRGB888Packed в ImageDestination.pixelFormat.

Кроме того, я был в состоянии сделать мое преобразование очень примитивным способом, который также получил работу, но потребовал слишком много времени процессора. Я зациклился на моем массиве imageData и вынул каждый четвертый пиксель.

for (int count_small = 0, count_large = 0; count_large < 1000; count_small += 3, count_large +=4) 
{ 
    dest[count_small] = source[count_large]; 
    dest[count_small+1] = source[count_large+1]; 
    dest[count_small+2] = source[count_large+2]; 
} 

Не чистый, но он выполнил свою работу.

Смежные вопросы