使用numpy在Python中读取16位PGM图像的有效且清晰的方法是什么?
由于PIL错误,我无法使用PIL加载16位PGM图像.我可以使用以下代码读取标题:
dt = np.dtype([('type', 'a2'),
('space_0', 'a1', ),
('x', 'a3', ),
('space_1', 'a1', ),
('y', 'a3', ),
('space_2', 'a1', ),
('maxval', 'a5')])
header = np.fromfile( 'img.pgm', dtype=dt )
print header
Run Code Online (Sandbox Code Playgroud)
这打印出正确的数据:('P5', ' ', '640', ' ', '480', ' ', '65535')但我感觉这不是最好的方式.除此之外,我无法弄清楚如何在x的y(在这种情况下为640x480)中读取以下数据,读取偏移量为16位size(header).
编辑:图像添加
读取和显示图像的MATLAB代码是:
I = imread('foo.pgm');
imagesc(I);
Run Code Online (Sandbox Code Playgroud)
看起来像这样:

在我之前的帖子中,我需要在10台计算机之间分发pgm文件的数据.在Jonathan Dursi和Shawn Chin的帮助下,我整合了代码.我可以编译我的程序,但它有分段错误.我跑了但什么都没发生
mpirun -np 10 ./exmpi_2 balloons.pgm output.pgm
结果是
[ubuntu:04803] *** Process received signal ***
[ubuntu:04803] Signal: Segmentation fault (11)
[ubuntu:04803] Signal code: Address not mapped (1)
[ubuntu:04803] Failing at address: 0x7548d0c
[ubuntu:04803] [ 0] [0x86b410]
[ubuntu:04803] [ 1] /lib/tls/i686/cmov/libc.so.6(fclose+0x1a0) [0x186b00]
[ubuntu:04803] [ 2] ./exmpi_2(main+0x78e) [0x80492c2]
[ubuntu:04803] [ 3] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0x141bd6]
[ubuntu:04803] [ 4] ./exmpi_2() [0x8048aa1]
[ubuntu:04803] *** End of error message ***
--------------------------------------------------------------------------
mpirun noticed that process rank 1 with PID 4803 on node ubuntu exited on signal …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个转换器算法,该算法采用JPEG图像并返回其PGM(便携式灰度图)版本.问题是我无法理解"官方"JPG-> PGM转换器如何根据从经典RGB格式开始分配给最终像素(我猜,0-> 255)的值来工作.
一开始,我使用了这个公式(它与OpenCV的CV_RGB2GRAY转换使用的公式相同):
0.30*R + 0.59*G + 0.11*B = val
我写了一个简单的代码来测试我的结果:它采用彩色图像及其PGM版本(已使用GIMP转换).然后它使用前面的公式转换彩色图像.目标是使像素到像素的灰度图像等于PGM输入.
此时,它不会返回相同的值.你能帮助我吗?
我想在 python 中读取 pgm 图像。我使用 cv2.imread('a.pgm') 但它返回错误的结果。在 Matlab 中,我使用 imread 并获得正确的结果,即单通道 16 位图像。但是python中的cv2.imread返回的是3通道图像,像素值也是错误的。为什么会发生?我应该如何在 python 中读取 16 位 pgm 图像?什么图书馆?
提前致谢。
我有16位PGM图像,我试图用Python阅读.似乎(?)像PIL不支持这种格式?
import Image
im = Image.open('test.pgm')
im.show()
Run Code Online (Sandbox Code Playgroud)
大致显示图像,但它不对.整个都有暗带,据报道img有mode=L.我认为这与我早期关于16位TIFF文件的问题有关.PIL只是不支持它的16位是罕见的吗?有什么建议我如何使用PIL或其他标准库或本土代码读取Python中的16位PGM文件?
我正在尝试使用 OpenCV(2.4.0) for C++ 加载和显示 .PGM 图像。
void open(char* location, int flag, int windowFlag)
{
Mat image = imread(location, flag);
namedWindow("Image window", windowFlag);
imshow("Image window", image);
waitKey(0);
}
Run Code Online (Sandbox Code Playgroud)
我是这样调用 open 的:
open("./img_00245_c1.pgm", IMREAD_UNCHANGED, CV_WINDOW_AUTOSIZE);
Run Code Online (Sandbox Code Playgroud)
问题是打开窗口时显示的图像比我用 IrfanView 打开文件时显示的图像更暗。此外,如果我尝试将此图像写入另一个文件,如下所示:
Mat imgWrite;
imgWrite = image;
imwrite("newImage.pgm", imgWrite)
Run Code Online (Sandbox Code Playgroud)
我将获得与原始文件内容不同的文件内容,并且 IrfanView 将在我的函数显示时使用 imshow 显示该内容。
.PGM 文件的 imread 中是否有不同的标志,以便我可以显示和保存原始文件?
编辑:图像pgm 文件
编辑 2 :备注: IrfanView 将图像标准化为最大像素值 255 。为了使用 OpenCV 清楚地看到图像,我还应该在加载 Mat 时对图像进行标准化。这是否可以直接使用 OpenCV 函数而无需遍历像素并修改它们的值?
我有兴趣在python中读取一个pgm文件作为数字文件/矩阵
现在我打开文件
f = open('/home/matthew/NCM/mdb001.pgm', 'rb')
Run Code Online (Sandbox Code Playgroud)
当我读到第一行时,它看起来像预期的那样
r.readline()
Run Code Online (Sandbox Code Playgroud)
产生
'P5\n'
Run Code Online (Sandbox Code Playgroud)
而下一行很好
'1024 1024\n'
Run Code Online (Sandbox Code Playgroud)
而下一个
'255\n'
Run Code Online (Sandbox Code Playgroud)
但后来我得到了一系列的胡言乱语.它看起来像一些十六进制值与其他东西混合在一起.
我不想将文件视为图片图片,我只想以这种格式看到它.
我已经提供了一个由.pgm图像组成的数据集,用于Matlab中的一些编码.我只是想知道是否可以在Matlab中查看与.jpeg/.png相同的图像?
谢谢
到目前为止,我可以读取每一行并将其打印到控制台:
void readFile(){
string line;
ifstream myfile("example1.pgm");
if (myfile.is_open()){
while (myfile.good()){
getline (myfile,line);
cout << line;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,pgm文件显然在数据开始之前总是有以下内容:
P2
# test.pgm
24 7
15
Run Code Online (Sandbox Code Playgroud)
我如何调整我的代码,以便检查"P2"是否存在,忽略任何注释(#),并存储变量和后续像素数据?
我有点失落,对c ++很陌生,所以任何帮助都是有用的.
谢谢
所以,我有一个PNG图像文件,如下例所示,我需要将其转换为PGM格式.
我正在使用Ubuntu和Python,因此任何终端或Python工具都适合.确实有很多方法可以做到这一点:使用ImageMagick'convert'命令或pngtopam包或Python PIL库等.
但关键是,在我的情况下,图像的质量是必不可少的,并且所有这些都未能保持它,总是最终得到:
没必要提到这完全不是我想要看到的.有趣的是,当我尝试使用GIMP手动将同一图像转换为PGM时,结果非常好,完全按照我喜欢的方式,即与PNG相同.
因此,这意味着它有可能获得在精细品质PGM图像毕竟,现在我真的很感激,如果有人可以告诉我,我这样做,使用终端/ Python的工具怎么办.我想,应该有一些ImageMagick选项可以解决问题,只是我不知道任何问题.