2010-11-19 2 views

ответ

4

Самый простой способ - просто перебрать элементы буфера с помощью at templated method.

unsigned char buffer[] = {1, 2, 3, ..., 18}; // RGBRGB... 
cv::Mat image(2, 3); 
for (int i = 0; i < 18; ++i) { 
    int row = i/9; 
    int col = (i/3)%3; 
    int rgb = i%3; // An index 
    image.at<unsigned char>(row,col+rgb) = buffer[i]; 
} 

Конечно, вы должны инициализировать матрицу с правильным типом, и установить формат цвета, который я не делал выше. Подробнее о объекте матрицы OpenCV here.

2

IplImage имеет переменную imageData. Это просто буфер. Таким образом, вы можете просто скопировать массив, если он имеет тот же формат, что и буфер imageData. Если формат отличается, то вы можете копировать, но вам нужно будет правильно заполнить другие переменные вашего IplImage.