【问题标题】:How can i show an image from its pixels which are already saved in a file ? [closed]如何从已保存在文件中的像素显示图像? [关闭]
【发布时间】:2012-02-06 12:06:00
【问题描述】:

我正在使用 opencv 和 c++ 将图像的像素保存在文件中,现在我想恢复图像以便再次显示它。能给点建议吗?

[更新:包含来自 OP 的 cmets 的代码] 我正在使用这些循环将图像的像素保存在文件中

for(int row=0; row<a;row++) 
    for(int col=0;col<b;col++) { 
        pixel[row][col]= ((uchar *)(img->imageData + row*img->widthStep))[col*img->nChannels +0]; 

现在我正在尝试读取这些像素以显示图像

【问题讨论】:

  • 完全相反,但反过来?
  • 我使用这些循环将图像的像素保存在文件中,for(int row=0; row)(img->imageData + rowimg->widthStep))[col*img->nChannels +0];现在我正在尝试读取这些像素以显示图像。
  • @AbdelazizOudouch:编辑这篇文章以显示您的代码,不要将您的代码放在评论中。您能轻松阅读 YOU 放在评论中的代码吗?
  • 你在谈论一个文件,但你没有在你的代码中读取文件。什么代表img,它包含什么?对于读者,正确写出包含 img 结构的内容。以及您要填写的内容。我的回应:只需用 pixel[][]... 填充 img->imageData...?那么我想你将内容写入文件。

标签: c++ opencv computer-vision vision


【解决方案1】:

在磁盘中存储图像数据的标准(推荐)方法是将像素放入图像容器 (jpg/png/bmp/tiff/...) 并将其保存到文件中。 OpenCV 很容易处理这个过程,因为您已经拥有 img 和 IplImage*,您只需调用 cvSaveImage() 并给出文件名:

if (!cvSaveImage("output.png", img))
{
    // print cvSaveImage failed and deal with error
}

那么,要从磁盘读取这个文件,可以使用cvLoadImage(),你可能已经用过。

如果出于某种神秘原因,您实际上只是将像素存储在文件中,那么您想将它们读回IplImage 结构是完全可以理解的。为此,您正在寻找的功能是cvCreateImage():

IplImage* new_img = cvCreateImage(cvSize(width, height), /*img depth*/, /* nChannels*/);

创建new_image 后,您需要将mempcy() 的像素读取到new_image-&gt;imageData。

但是,您需要事先知道图像的实际大小才能使用这种方法。如果您只是将图像的像素存储在文件中,那么我建议您将图像的大小存储为文件名的一部分。

使用 OpenCV 函数处理图像的一个好处是您的系统将能够识别和显示它们(这对于调试目的非常重要)。

【讨论】:

    【解决方案2】:
    img->imageData = malloc(a*img->widthStep);  //do this if you didnt allocate the memory before. a*img->widthStep shouldbe the right size of memor needed if imn ot wrong.   
    for(int row=0; row<a;row++) 
    {
         for(int col=0;col<b;col++) 
         { 
      ((uchar*)(img->imageData + row*img->widthStep))[col*img->nChannels +0] = pixel[row][col];
       // you didnt say what is th type of date in imadeData : put other casts if necessary.
            }
        }
    

    您是否将 img->imageData 中的所有信息放入原始代码中的像素中?

    所以,karlphillip 的回答是:“你需要 mempcy() 读取到 new_image->imageData 的像素”是我在代码中所做的。

    【讨论】:

    • 我只处理灰度图像。 (我很抱歉我的沟通质量不好,但我相信我会提高我的水平,以便积极参与这个网站)
    猜你喜欢
    • 2013-05-09
    • 2012-01-27
    • 2018-10-23
    • 2014-10-23
    • 2021-06-12
    • 1970-01-01
    • 2023-03-25
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多