我正在使用c-api,并且是OpenCV的新手。c OpenCV;如何将2维数组转换为IplImage?
假设我有二维数组包括;红色[] [],绿色[] [],蓝色[] []。我想将3-D数组转换为IplImage并将其保存为.png文件。但是,从我的系统我不能使用CvMat。
你能帮我解决这个问题吗?
谢谢。
我正在使用c-api,并且是OpenCV的新手。c OpenCV;如何将2维数组转换为IplImage?
假设我有二维数组包括;红色[] [],绿色[] [],蓝色[] []。我想将3-D数组转换为IplImage并将其保存为.png文件。但是,从我的系统我不能使用CvMat。
你能帮我解决这个问题吗?
谢谢。
如果您使用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,就释放内存。
谢谢你的代码,但是当我编译它时,我得到了这个消息**“错误:没有匹配函数调用'cv :: Mat :: zeros(int&,int&)'”**。也许我的系统安装了旧版本的OpencV。我无法自己控制系统。你能否在不使用Mat的情况下推荐其他方式? –
我忘记了第三个参数,它是像素类型。在我们的例子中,我们有3个无符号的字符,这正是CV_8UC3的含义(CV_ {bits per pixel} {U | S | F} {channels}其中U - 无符号,S - 有符号,F - 浮点数 – marol
我将转换添加到IplImage,即使你不想使用C++ API,并且你有opencv ver。> 2.0,你必须有C++ api,所以你可以使用它。 – marol
IplImage是过时的c-api,而不是C++。躲开它。 – berak
感谢您提供更多信息,但我无法控制现在使用的系统。 –