当我们有一个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);
}
Run Code Online (Sandbox Code Playgroud)
我已经在注释掉的for循环中打印出所有值,看起来数据正好在缓冲区中.使用cvShowImage显示图像也可以正常工作,所以看起来图像的结构很好.
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);
}
Run Code Online (Sandbox Code Playgroud)
运行它不应该崩溃.
你的代码有些问题
| 归档时间: |
|
| 查看次数: |
23224 次 |
| 最近记录: |