2014-04-04 75 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