2014-04-04 52 views
0

我正在使用c-api,並且是OpenCV的新手。c OpenCV;如何將2維數組轉換爲IplImage?

假設我有二維數組包括;紅色[] [],綠色[] [],藍色[] []。我想將3-D數組轉換爲IplImage並將其保存爲.png文件。但是,從我的系統我不能使用CvMat。

你能幫我解決這個問題嗎?

謝謝。

+3

IplImage是過時的c-api,而不是C++。躲開它。 – berak

+0

感謝您提供更多信息,但我無法控制現在使用的系統。 –

回答

2

如果您使用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,轉換,從簡歷::墊的IplImage工作:

IplImage *frameConverted = new IplImage(image); 

記住如果你不需要frameConverted,就釋放內存。

+0

謝謝你的代碼,但是當我編譯它時,我得到了這個消息**「錯誤:沒有匹配函數調用'cv :: Mat :: zeros(int&,int&)'」**。也許我的系統安裝了舊版本的OpencV。我無法自己控制系統。你能否在不使用Mat的情況下推薦其他方式? –

+2

我忘記了第三個參數,它是像素類型。在我們的例子中,我們有3個無符號的字符,這正是CV_8UC3的含義(CV_ {bits per pixel} {U | S | F} {channels}其中U - 無符號,S - 有符號,F - 浮點數 – marol

+0

我將轉換添加到IplImage,即使你不想使用C++ API,並且你有opencv ver。> 2.0,你必須有C++ api,所以你可以使用它。 – marol

相關問題