быстро обрабатывать пиксели изображения opencv с использованием интерфейса python

Используя python-интерфейс для OpenCV, можно легко получить доступ к пикселю изображения с помощью оператора [], например:

img = cv.LoadImage('test.jpg') pixel = img[10,10] 

переменный пиксель здесь представляет собой объект кортежа python вроде (10,20,30) (например, 3 канала), обрабатывать вычисления не очень удобно, так как тип tuple не поддерживает оператор '-' или '+' . Если я надеюсь сделать подстроку на пикселе, подобном 255 – (10,20,30) , я должен сделать следующее:

 import numpy as np pixel = tuple( np.array([255,255,255]) - np.array(pixel) ) 

есть ли более быстрое и простое решение?
Еще один вопрос: есть ли способ сделать вывод по всем пикселям, например, используя матричную подстановку в Matlab: 255 – img (не использовать функцию сборки OpenCV).

Вы можете использовать функции cv2array()/array2cv() из adaptors.py в исходном дистрибутиве opencv и выполнять все ваши вычисления с использованием массивов numpy . 255 - imgarr работает в этом случае. Пример (урезанная версия cv2array() для массивов только для чтения):

 assert isinstance(img, cv.iplimage) and img.depth == cv.IPL_DEPTH_8U a = np.frombuffer(img.tostring(), dtype=np.uint8) a.shape = img.height, img.width, img.nChannels print 255 - a