быстрая обработка пикселей изображения opencv с использованием интерфейса Python - PullRequest
5 голосов
/ 23 апреля 2011

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

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

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

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

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

1 Ответ

3 голосов
/ 24 апреля 2011

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...