в OpenCV; Как преобразовать двумерный массив в IplImage?

Я использую c-api и новичок в OpenCV.

Предположим, у меня есть двумерный массив, в том числе; красный[][], зеленый[][], синий[][]. Я хотел бы преобразовать 3 из 2-мерного массива в IplImage и сохранить его в файл .png. Однако из моей системы я не могу использовать CvMat.

Не могли бы вы помочь мне решить эту проблему.

Спасибо.


person Olarik Surinta    schedule 04.04.2014    source источник
comment
IplImage — это устаревший c-api, а не c++. избегай это.   -  person berak    schedule 04.04.2014
comment
спасибо за дополнительную информацию, но я не могу контролировать систему, которую использую сейчас.   -  person Olarik Surinta    schedule 04.04.2014


Ответы (1)


Если вы используете C++, используйте C++ API:

cv::Mat image = cv::Mat::zeros(w,h, CV_8UC3);
for(int x=0;x<w;x++)
   for(int y=0;y<h;y++)
        image.at<cv::Vec3b>(y,x) = cv::Vec3b(red[x][y], blue[x][y], green[x][y]);
cv::imwrite("image.png", image);

Но если вы действительно хотите иметь c-api, преобразование из cv::Mat в IplImage работает:

IplImage *frameConverted = new IplImage(image);

Помните об освобождении памяти, если вам больше не нужен frameConverted.

person marol    schedule 04.04.2014
comment
Спасибо за ваш код, но я получил это сообщение ошибка: нет соответствующей функции для вызова ‘cv::Mat::zeros(int&, int&)’ при его компиляции. Возможно, моя система установила старую версию OpencV. Я не могу управлять системой самостоятельно. Не могли бы вы предложить другой способ, не используя мат. - person Olarik Surinta; 04.04.2014
comment
Я забыл о третьем параметре, который является типом пикселя. В нашем случае у нас есть 3 символа без знака, и это именно то, что означает CV_8UC3 (CV_{бит на пиксель}{U|S|F}{каналы}, где U - без знака, S - со знаком, F - с плавающей запятой - person marol; 04.04.2014
comment
Я добавил преобразование в IplImage. Даже если вы не хотите использовать C++ API и у вас есть opencv ver. › 2.0 у вас должен быть C++ API, чтобы вы могли его использовать в любом случае. - person marol; 04.04.2014