2

我打开一个 pgm 文件,将其转换为 numPy 数组并将所有像素更改为 0 或 1(或 255,我还不知道如何进行)。如何使用 openCV 将其保存为 .PBM?

喜欢:

P1
512 512
0 1 0 0 0 . .
0 0 0 1 0 . .
. . . . . . .
. . . . . . . 
. . . . . . . 

提前致谢!

4

2 回答 2

2
vector<int> params;
params.push_back(CV_IMWRITE_PXM_BINARY);
params.push_back(0); // 1 for binary format, 0 for ascii format
imwrite("image.pbm", image, params); // the .pbm extension specifies the encoding format
于 2013-10-01T08:10:40.657 回答
1

使用 OpenCV 似乎有点矫枉过正。只需打开一个文件并写入标题和图像数据。普通的 PBM 效率很低。请考虑使用原始 PBM(幻数 P4)。例如对于 Python 2.7:

with open('image.pbm', 'wb') as fd:
    fd.write("P4\n%i %i\n" % image.shape[::-1])
    numpy.packbits(image, axis=-1).tofile(fd)

对于普通 PBM:

with open('image.pbm', 'w') as fd:
    fd.write("P1\n%i %i\n" % image.shape[::-1])
    fd.write("\n".join(" ".join(str(i) for i in j) for j in image))

image是一个二维二进制值 numpy 数组。

于 2013-10-01T08:23:11.000 回答