问题标签 [netpbm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
256 浏览

python-3.x - 从 python 3.x 中的文件读取输入

假设您正在从一个结构如下的文件中读取输入

但是您要考虑可能来自输入文件的任何错误,如

我想读入第一个标记“P3”,然后是接下来的两个“400”“200”(高度/宽度)“255”,从这里开始,我想读入每个标记并说明它们应该如何进入3 人一组。我有正确的代码来读取这些信息,但我似乎无法克服如何通过令牌而不是按行来读取信息的问题。

这并不能解释不完美的输入。

0 投票
1 回答
235 浏览

imagemagick - (现代)将图像文件裁剪为自动确定的边界框的工具?

我需要从渲染管道不生成(可靠)边界框的图表中​​裁剪空白(边距等)。边缘是可靠的白色,因此自动检测原则上是微不足道的,但是我设法找到的唯一现有工具是1990 年代初期的古老 pnmcrop ( http://netpbm.sourceforge.net/doc/pnmcrop.html ),它使用晦涩难懂的 netpbm 图像格式(https://en.wikipedia.org/wiki/Netpbm_format)。

netpbm 工具确实包含 PNG 格式转换器,所以这个三元组可以工作:

但它有点笨拙(并且使用图表,中间 PPM 文件可以膨胀超过 100 倍:original.png 是 165kB,original.ppm 是 224MB)。

肯定有一种方法可以哄骗像 imagemagick 这样的现代工具来查找和裁剪边框?

编辑:netpbm 工具支持标准输入。因此,作为没有临时文件的更好的单线:

使用适当的工具替换(jpgtopnm、giftopnm 等 - 从所有 71 种可能性中选择!)它仍然有点笨拙。

0 投票
2 回答
361 浏览

image - 图像中的额外数据 (PPM/PAM/PNM)

是否可以将额外的数据存储在二进制 PNM 文件的像素中,使其仍然可以作为图像读取(希望任何解码器,但特别是 ffmpeg)?

我有一个模拟,目前将其数据保存为 PPM,我想要一种方法来记录文件中每个像素的三个以上的值,但仍然能够将其用作图像(显然只有前三个/四个值实际上会影响图像)。

在粒子中,我认为 PAM 的 TUPLTYPE 应该允许我这样做,但我不知道如何从中制作出可读图像。

0 投票
1 回答
89 浏览

image - 为什么这个 pbm 图像表现得很奇怪

我试图理解为什么我没有从以下代码行中得到预期的结果:

原始图像和 test1.pbm(image 1 ) 相同,但 test2.pbm (image 2 ) 不是我所期望的(前景像素变为背景像素,反之亦然)。我在此处附上图像(转换为 jpeg)。我究竟做错了什么?

另一个问题是,对于 test1.pbm 中的大多数前景像素,该值为 False。但这并没有反映在保存的图像中。

我使用 Imagemagick 从这个原始图像http://www.mathgoodies.com/lessons/graphs/images/line_example1.jpg转换了这两个图像。测试1.jpg

测试2.jpg

0 投票
1 回答
67 浏览

c - 如何从图像的大小中提取列数和行数

我必须提取一个 pgm 图像。我所拥有的只是整个 PGM 图像的大小,即 505 我试图从该图像中提取行数和列数。整数大小 = 505;

一开始我觉得列数应该是 int col = 505/8// size of 1 byte int row = col *8

我不知道这是否正确?请指教

0 投票
1 回答
377 浏览

colors - Netpbm 格式 pgm 和 ppm 最大值是否可以大于 255?

我真的找不到任何文档/信息,那么netpbm格式是否支持大于max values255 的颜色缩放以及颜色缩放如何工作?

0 投票
1 回答
256 浏览

linux - 如何复制,粘贴和水平和垂直翻转许多图像?

基本上,我有 500 多张图片需要以完全相同的方式进行修改。我有这样的图像图像输入

我需要复制图像的左侧,更准确地说是尺寸为 645x999 像素的矩形,粘贴它,对角翻转并将其移动到右侧。我可以使用任何图像编辑器手动执行此操作,但我想知道我是否可以编写程序(最好在 c++ 中),或者输入可以为我执行此操作的命令。我希望得到这个图像输出,任何建议都会有很大帮助。

谢谢你。

0 投票
1 回答
212 浏览

c - 在 C 中转置大图像和窄图像

我正在尝试在 C 中处理大型 .pgm 图像。首先以 Image 格式读取图像,作为unsigned char元素的矩阵:

我正在使用以下函数读取图像,使用 netpbm (netpbm/pam.h):

读取后,图像被转换为​​ ImageF 格式,这样我就可以将元素处理为double,如下所示:

将图像转换为 ImageF:

对于实际的图像处理,我需要对图像进行转置,所以我编写了以下函数:

转置后,图像从 ImageF 转换回 Image,以存储结果(将 double 转换为 unsigned char):

最后使用以下函数存储它们:

在使用 loadPBM 加载输入图像后,我相信图像内存空间分配是正确完成的,如下所示:

出于某种原因,这适用于方形图像甚至分辨率约为 450x700 的图像。但随着图像变窄(例如 170x500),此算法将停止正常运行。图像变得扭曲,我不知道为什么,因为它适用于其他不那么窄的非方阵。如果有人能看到我哪里出错或有一些建议或任何东西,将不胜感激!

提前致谢!

0 投票
1 回答
143 浏览

c++ - 在与 for 循环时反转 PBM 图像的位

我正在尝试翻转只有纯黑色和纯白色的简单 pbm 图像的像素颜色。我自己生成图像,然后读取它,然后翻转位并保存生成的图像和颜色反转的图像。

这是我的代码(write_pbm.cpp) -

}

下面是我包含的标题(write_pbm.h

下面是我的主要 -

所以我正在制作一种 V 十字图案,然后反转颜色并保存创建的图像和反转的图像。

假设我们提供输入10 10

然后文件sample.pbm看起来像

inverted.pbm看起来像这样

正如你所看到的,只有一半的行被打印在倒置的图像中。

invert()如果我将of的嵌套循环替换write_pbm.cpp

然后它在inverted.pbm文件中给出正确的输出

我通过嵌套循环和while循环都在做同样的事情,那么为什么在嵌套for循环的情况下它会给出错误的输出?

感谢您阅读本文,请提供您宝贵的回复。

0 投票
2 回答
339 浏览

image-processing - 了解 NetPBM 的 PNM 非线性 RGB 颜色空间以转换为灰度

我试图了解如何正确使用 PNM 格式中的 RGB 值,以便不可避免地将它们转换为灰度。

研究这个主题,如果 RGB 值是非线性的,那么我需要首先将它们转换为线性 RGB 颜色空间,应用我的权重,然后将它们转换回相同的非线性颜色空间。

似乎有一个预期的格式http://netpbm.sourceforge.net/doc/ppm.html

在栅格中,样本值是“非线性的”。它们与像素中的ITU-R 建议 BT.709红色、绿色和蓝色的强度成正比,并由 BT.709 伽马传递函数进行调整。

所以我认为这些值是非线性的,但不是 sRGB。我在 ImageMagick 周围发现了一些主题,这些主题说它们可能会将它们保存为线性 RGB 值。

我是否正确认为 PNM 指定了一个标准,但是像 Photoshop 或 GIMP 这样的各种编辑器可能会也可能不会遵循它?

来自http://netpbm.sourceforge.net/doc/pamrecolor.html

使用此选项时,输入和输出图像不是真正的 Netpbm 图像,因为 Netpbm 图像格式指定了特定的颜色空间。相反,您使用的是格式的变体,其中栅格中的样本值具有不同的含义。许多表面上使用 Netpbm 图像的程序实际上使用具有不同颜色空间的变体。例如,GIMP 在内部使用 sRGB,如果您让 GIMP 生成 Netpbm 图像文件,它实际上会生成使用 sRGB 格式的变体。

在其他地方我看到这个http://netpbm.sourceforge.net/doc/pgm.html

每个灰度值是一个与像素强度成比例的数字,由 ITU-R 建议 BT.709 伽马传递函数调整。(该传递函数指定 2.2 的伽马数,并且具有小强度的线性部分)。因此,零值是黑色的。Maxval 的值表示 CIE D65 白色和图像中最强烈的值以及该图像可能与之比较的任何其他图像。

BT.709 的通道值范围 (16-240) 与 PGM 无关。

请注意,PGM 格式的一个常见变化是使灰度值为“线性”,即如上所述,除了没有伽马调整之外。pnmgamma 将这样的 PGM 变体作为输入,并产生一个真正的 PGM 作为输出。

那里的大多数来源都假设他们正在处理线性 RGB,只是应用它们的权重并保存,可能不保留亮度。我假设任何投诉渲染器都会假设这些 RGB 值是经过伽马压缩的……因此在技术上显示的灰度“颜色”与我指定的不同。这个对吗?也许换个方式问,有关系吗?我知道这是一个加载的问题,但如果我不能真正判断它是线性的还是非线性的,或者它是如何被压缩或预期被压缩的,如果我只是假设,图像处理算法(二值化)是否会受到很大影响线性RGB值?