当我们有了一个IplImage,我们如何保存它以便我们以后使用它,或者在我们的代码之外查看它作为图像(例如通过png或jpeg)?
作为代码示例,我有以下内容:
void SaveImage()
{
CvSize size;
IplImage *rgb_img;
int i = 0;
size.height = HEIGHT;
size.width = WIDTH;
rgb_img = cvCreateImageHeader(size, IPL_DEPTH_8U, 3);
rgb_img->imageData = my_device.ColorBuffer;
rgb_img->imageDataOrigin = rgb_img->imageData;
/*for (i = 2; i < rgb_img->imageSize; i+= 3)
{
// confirming all values print correctly
printf("%d, ", rgb_img->imageData[i]);
}*/
cvSaveImage("foo.png",rgb_img);
}我已经打印出了被注释掉的for循环中的所有值,看起来数据在缓冲区中是正确的。使用cvShowImage显示图像也可以正常工作,因此图像的结构看起来很好。
发布于 2011-03-24 02:58:03
void SaveImage()
{
CvSize size;
IplImage *rgb_img;
int i = 0;
size.height = HEIGHT;
size.width = WIDTH;
rgb_img = cvCreateImageHeader(size, IPL_DEPTH_8U, 3);
rgb_img->imageData = my_device.ColorBuffer;
// You should NOT have the line below or OpenCV will try to deallocate your data
//rgb_img->imageDataOrigin = rgb_img->imageData;
for (i = 0; i < size.height; i++)
{
for (j = 0;j < size.width; j++)
{
// confirming all values print correctly
printf("%c, ", rgb_img->imageData[i*width + j]);
}
}
cvSaveImage("foo.png",rgb_img);
}运行这个应该不会崩溃。
您的代码存在一些问题
发布于 2011-03-24 02:59:24
要保存:
cvSaveImage(outFileName,img)如果您想检查它是否已保存,您可以执行以下操作:
if(!cvSaveImage(outFileName,img)) printf("Could not save: %s\n",outFileName);取自谷歌上的http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html#SECTION00052000000000000000 - top结果:"opencv write iplimage“。
https://stackoverflow.com/questions/5410167
复制相似问题