Как сохранить изображение.PBM?

Я открываю файл pgm, преобразую его в массив numPy и меняю все пиксели на 0 или 1 (или 255, пока не знаю, как поступить). Как я могу сохранить его как.PBM, используя openCV?

Подобно:

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

Заранее спасибо!

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

Использование OpenCV кажется излишним. Просто откройте файл и напишите заголовок и данные изображения. Обычная PBM очень неэффективна. Вместо этого рассмотрим Raw 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.

Другие вопросы по тегам