2013-06-26 4 views
0

У меня 2D-вектор называется Mat со значениями от 0 до 255, я относящий IplImage как то, что следовать:3 доступа изображения канала с помощью OpenCV

IplImage *A=cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 1) 
for (int i=0;i<640;i++) 
{ 
for (j...) 
{ 
    A->imageData[i*640+j]=Mat[i][j] 
} 
} 

Но как насчет, если им с 3 2D векторов MAT1, MAT2, Mat3 и IplImage которого число каналов равно 3:

IplImage *A=cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 3) 

Я думал, что я мог бы сделать это канал, канал и объединить их все в конце концов, но я действительно считаю, что это а не оптимальное решение.

Любая идея, как получить доступ к imageData из 3-х каналов в этом случае?

+0

Почему вы используете старый API C? Это было бы намного проще с классом C++ Mat. – jnovacho

ответ

0

Во-первых, обратите внимание, что вы можете избежать написания первого кода, если Mat выровнен, напрямую назначив элемент структуры imageDataIplImage. Вы должны будете использовать cvCreateImageHeader вместо cvCreateImage, чтобы избежать выделения данных для изображения. Более подробную информацию о структуре можно найти here.

Во-вторых, в отношении вашего вопроса - это можно сделать, создав три изображения по технике, о которой я упоминал ранее, а затем используя cvMerge для получения окончательного изображения. Дополнительная информация here.

В общем, я рекомендую вам перейти на интерфейс C++ OpenCV, который использует cv::Mat вместо старого интерфейса IplImage.

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