使用python接口快速处理opencv图像像素

Pin*_*Jie 5 python opencv numpy

使用python-interface for OpenCV,可以使用[]运算符轻松访问图像像素,如下所示:

img = cv.LoadImage('test.jpg')
pixel = img[10,10]
Run Code Online (Sandbox Code Playgroud)

这里的变量像素是一个python元组对象,如(10,20,30)(例如3个通道),处理计算不是很方便,因为元组类型不支持运算符' - '或'+'.如果我希望在像255(10,20,30)之类的像素上做一个子结构,我必须这样编码:

import numpy as np
pixel = tuple( np.array([255,255,255]) - np.array(pixel) )
Run Code Online (Sandbox Code Playgroud)

有更快更容易的解决方案吗?
另一个问题是:有没有办法对所有像素进行减法,比如在Matlab中使用矩阵减法:255 - img(不要使用OpenCV内置函数).

jfs*_*jfs 3

您可以使用cv2array()/array2cv()opencv 源代码发行版中的aptors.py 中的函数,并使用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
Run Code Online (Sandbox Code Playgroud)