首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大型JPEG/PNG图像序列循环

大型JPEG/PNG图像序列循环
EN

Stack Overflow用户
提问于 2011-01-30 20:21:36
回答 2查看 1.9K关注 0票数 5

我一直在做我的项目,关于遥感图像处理和图像序列循环。每个生成的图像( JPEG或PNG格式)大约有8000 * 4000像素。我们的用户通常希望根据感兴趣的区域一次循环一个图像序列(超过50个图像)。因此,我必须根据用户的可视化客户端大小从每个图像中提取所需的查看区域。例如,如果用户的当前客户机视图是640 * 480,我必须根据当前的x(列)和y(行)坐标从每个原始图像中找到640 * 480大小的数据块,然后重新映射到客户机视图。当用户通过鼠标拖动平移到另一个查看区域时,我们的程序必须相应地尽快从每个原始图像中重新加载区域数据。

我知道JPEG库和PNG库都没有内置一些读取数据块的例程,比如long ReadRectangle (long x0,long y0,long x1,long y1,char* RectData);long ReadInaRectangle (long x0,long y0,short width,short height,char* RectData);

内置的JPEG解压缩器缺少这种功能。我知道JPEG2000格式提供了解压图像的特定区域。我对JEPG不是完全确定。

有人建议我使用CreateFileMapping、MapViewOfFile和CreateDIBSection来提交映射到视图的文件映射的字节数。与简单的平面二进制图像格式(如*.raw、*.img和*.bmp )不同,JPEG不仅包含图像数据,还包含复杂的JPG头。因此,将一块数据视图映射到JPEG文件之外并不容易。

有人建议我使用图像平铺或图像金字塔技术生成子图像,就像流行的图像可视化(Google Earth等)和地理信息系统应用程序(WebGIS等)一样。做。

我该如何解决这个问题?

谢谢你的帮助。

金李

EN

回答 2

Stack Overflow用户

发布于 2011-01-30 22:35:44

如果你同意区域坐标是8的倍数,ijg的JPEG库也许能够帮助你加载部分JPEG图像。

你会想要:

  1. 获取整个图像的所有离散余弦变换系数。这是一个example of how to do this。是的,这将涉及整个图像的熵解码,但这是JPEG解码中成本较低的步骤(IDCT是最昂贵的步骤,我们正在避免它)。
  2. 丢弃了你不需要的块(每个块由8x8组成)系数。您必须手动完成此操作,但由于布局非常简单(块按扫描线顺序排列),因此不应该很难。
  3. 对每个帧应用块逆离散余弦变换。你也许可以让IJG为你做这件事。如果不能,那么你将不得不做你自己的IDCT和颜色转换回0,255,因为在JPEG的世界中强度是-127,128。
  4. 如果一切顺利,你将得到解码的JPEG图像。由于chroma subsampling,亮度和色度通道可能具有不同的维度,您必须自己通过缩放来补偿这一点。

链接几乎涵盖了前两个步骤。第四个是非常简单的(您可以使用IJG接口获得色度子采样的类型,缩放--本质上是上采样--很容易通过使用OpenCV或滚动您自己的代码来实现)。third one是我还没有尝试过的东西,但听起来它是可能的。

票数 3
EN

Stack Overflow用户

发布于 2011-01-30 22:24:06

使用gd library很容易。LibGD是一个开源代码库,用于由程序员动态创建图像。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4842854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档