Настройте режим Mono12 на камере IDS через python uEye

Кто-нибудь знает, как правильно настроить режим Mono12 на IDS камере?

Я пробовал метод is_SetColorMode, установив БИТЫ на пиксель на 12 и БАЙТЫ на пиксель на 2 и так далее. Это не так хорошо работает.

Наконец, я создал файл конфигурации в IDS uEye Cockpit, сохранил его и теперь использую для настройки камеры в начале кода Python. Это тоже не помогает.

Проблема, с которой я столкнулся сейчас, заключается в том, что изображение, которое я получаю, представлено двумя массивами ~2056*2056 (размер чипа). Это происходит потому, что у меня 2 байта на пиксель. Но я не знаю, как правильно преобразовать его в нормальный образ.

Кроме того, даже в режиме Mono8, который используется по умолчанию, я вижу изображение, отличное от того, которое я получаю в приложении IDS.

Вот код (тоже могу дать файл конфигурации):

import matplotlib.pyplot as plt
import numpy as np
import cv2
import sys
import pyueye.ueye as ueye
import time

hCam = ueye.HIDS(0)
# Starts the driver and establishes the connection to the camera
nRet = ueye.is_InitCamera(hCam, None)
if nRet != ueye.IS_SUCCESS:
    print("is_InitCamera ERROR")

conf_file = 'camera_config_mono12.ini'

nRet = ueye.is_ParameterSet(hCam,
                            ueye.INT(2),
                            ueye.wchar_p(conf_file),
                            ueye.sizeof(ueye.INT(2)))
print(str(nRet) + ' - ParameterSet')

nRet = ueye.is_SetColorMode(hCam, ueye.IS_CM_MONO12)
print(str(nRet) + ' - SetColorMode')
BitesPerPix = ueye.INT(12)
BytesPerPixel = 2

nRet = ueye.is_SetDisplayMode(hCam, ueye.INT(1))
print(str(nRet) + ' - SetDisplayMode')

nRet = ueye.is_SetFrameRate(hCam, ueye.c_double(1), ueye.c_double())
print(str(nRet) + ' - SetFrameRate')

exp_time = ueye.c_void_p(200)
nRet = ueye.is_Exposure(hCam, ueye.INT(12), exp_time, 8)
print(str(nRet) + ' - Exposure')

rectAOI = ueye.IS_RECT()
nRet = ueye.is_AOI(hCam, ueye.INT(2), rectAOI, ueye.sizeof(rectAOI))
print(str(nRet) + ' - AOI')

save_file = 'C:\\Users\\novoks\\Desktop\\emva_tests\\ids\\saved_conf.ini'
nRet = ueye.is_ParameterSet(hCam,
                            ueye.INT(4),
                            ueye.wchar_p(save_file),
                            ueye.sizeof(ueye.INT(4)))

pcImageMem = ueye.c_mem_p()
pid = ueye.c_int()
nRet = ueye.is_AllocImageMem(hCam,
                             rectAOI.s32Width,
                             rectAOI.s32Height,
                             BitesPerPix,
                             pcImageMem,
                             pid)
print(str(nRet) + ' - AllocImageMem')

nRet = ueye.is_SetImageMem(hCam, pcImageMem, pid)
print(str(nRet) + ' - SetImageMem')

nRet = ueye.is_CaptureVideo(hCam, ueye.IS_DONT_WAIT)
print(str(nRet) + ' - CaptureVideo')

time.sleep(1)

#nRet = ueye.is_FreezeVideo(hCam, ueye.INT(0))
#print(str(nRet) + ' - FreezeVideo')

bts = ueye.INT()
pitch = ueye.INT()
nRet = ueye.is_InquireImageMem(hCam,
                               pcImageMem,
                               pid,
                               ueye.INT(),
                               ueye.INT(),
                               bts,
                               pitch)
print(str(nRet) + ' - InquireImageMem')

array = ueye.get_data(pcImageMem,
                      rectAOI.s32Width,
                      rectAOI.s32Height,
                      BitesPerPix,
                      pitch,
                      copy=False)
print(str(nRet) + ' - get_data')

pict = np.reshape(array,
                  (rectAOI.s32Height.value,
                   rectAOI.s32Width.value,
                   BytesPerPixel))

plt.figure(figsize=[12,5])

plt.subplot(1,3,1)
plt.imshow(pict[:,:,0])

plt.subplot(1,3,2)
plt.imshow(pict[:,:,1])

plt.subplot(1,3,3)
plt.imshow(pict[:,:,0] + pict[:,:,1])

plt.show()

nRet = ueye.is_ExitCamera(hCam)

0 ответов

Вы должны использовать 16 бит на пиксель вместо 12, поскольку Mono12 не является упакованным форматом. Взгляните на страницу руководства "Цвета и форматы памяти". Там написано 16 бит в цветном режиме MONO12.

Попробуйте уменьшить количество пикселей на ueye.is_PixelClock()команда. Когда я попробовал RAW12 с участием pixelclock= 35 (максимальная доступная скорость для моего UI-3240), команда получения изображения ничего не вернула (0) - как в вашем случае.

Но как только я снизил частоту до 10 МГц, данные изображения возвращались нормально.

Этот формат изображения и проблема с пиксельной частотой также можно проверить с помощью IDS Camera Manager. Когда вы переключаете формат с Mono8(по умолчанию) на Raw12, программа сразу показывает сообщение об ошибке.

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