Чтение МОНО 16-битных изображений с помощью PyCapture2 - PullRequest
0 голосов
/ 01 мая 2018

Я использую камеру CMLN-13S2M-CS от PointGrey. Эта камера имеет 16-битный формат MONO. Используя обертку PyCapture2 от PointGrey, я не могу получить изображение, которое записывает камера.

У меня есть следующий код:

import sys
import numpy
import PyCapture2

## Connect camera
bus = PyCapture2.BusManager()
c = PyCapture2.Camera()
c.connect(bus.getCameraFromIndex(0))

## Configure camera format7 settings
fmt7imgSet = PyCapture2.Format7ImageSettings(0, 0, 0, 1296, 964, PyCapture2.PIXEL_FORMAT.MONO16)
fmt7pktInf, isValid = c.validateFormat7Settings(fmt7imgSet)
c.setFormat7ConfigurationPacket(fmt7pktInf.recommendedBytesPerPacket, fmt7imgSet)

## Start capture and retrieve buffer
c.startCapture()
im = c.retrieveBuffer()

print im.getData().shape
print numpy.max(im.getData())

Следующие операторы print возвращают: (2498688,) и 240. Форма точно 2 x (964 x 1296). Как я должен изменить это? Кроме того, максимальное значение при насыщении составляет 255. Это странно, поскольку соответствует формату MONO 8 Pixel. Что я делаю не так?

1 Ответ

0 голосов
/ 01 мая 2018

Вот краткая демонстрация, в которой показано, как преобразовать одномерный массив uint8 в двумерный массив uint16. Здесь нам нужна ключевая функция view.

import numpy as np

# Make 24 bytes of fake data
raw = np.arange(24, dtype=np.uint8)

#Convert
out = raw.view(np.uint16).reshape(3, 4)
print(out)
print(out.dtype)

выход

[[ 256  770 1284 1798]
 [2312 2826 3340 3854]
 [4368 4882 5396 5910]]
uint16

Спасибо Андрасу Дику за помощь!

Если получающееся изображение не выглядит правильным, вам, возможно, потребуется поменять местами порядок следования 16-битных целых чисел. Вы можете прочитать о порядке байтов в Numpy здесь .

И если , что по-прежнему выглядит некорректно, то данные могут быть организованы в виде двух плоскостей, одна из которых предназначена для младших битов пикселя, а другая - для старшего порядка. биты. С этим тоже легко справиться, но, надеюсь, до этого не дойдет. ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...