Мы разрабатываем медицинскую камеру, которая генерирует изображения (25 кадров в секунду), которые отправляются в приложение Python Qt. Я врезаюсь в кирпичную стену, пытаясь получить последовательность изображений с камеры. Каждый кадр обрабатывается функцией обратного вызова, а затем — обработчиком кадров.
Мы работаем под Windows 7 64 бит и python3
У нас есть следующий заголовок c ++:
DC_API signed int Start(const ImageConfig * cfg,
void (*NewImage)(const char * image, unsigned int width, unsigned int height, unsigned int frameNumber, unsigned long long frameTime));
Который я использую в Python как:
def __init__(self, frame_processor ):
self.callback_frame_processor = frame_processor
def new_image(image, width, height, framenbr, frametime):
self.width = width
self.height = height
self.frametime = frametime
self.framenr = framenbr
self.callback_frame_processor(image)
self.new_image_function = ctypes.CFUNCTYPE( None, ctypes.POINTER(ctypes.c_char), ctypes.c_int,
ctypes.c_int, ctypes.c_int, ctypes.c_longlong )
self.callback_function = self.new_image_function(new_image)
Фрейм-процессор это:
def start_grabbing_frames(self):
f = self._preparecall('Start')
image_config_struct, image_config_pointer = self._fill_image_config()
f.argtypes = [image_config_pointer, self.new_image_function]
return self.process_errorcodes(f(ctypes.byref(image_config_struct), self.callback_function))
Фрейм-процессор это:
def camera_callback(self, raw_image, width, height):
qt_image = QImage(raw_image, width, height, QImage.Format.RGB888)
qpixmap = QPixmap(width, height)
pix = qpixmap.fromImage(qt_image)
self.emit(pix)
Проблема в том, что кажется, что изображение не является допустимым кадром (len (raw_image) — 13036022, ширина — 2208, а высота — 1648). Это приводит к зависанию приложения, где изображение не отображается.
Задача ещё не решена.
Других решений пока нет …