使用OpenCV的python接口,可以使用[]操作符轻松访问图像的像素,如下所示:
img = cv.LoadImage('test.jpg')
pixel = img[10,10]
变量像素这里是一个python元组对象,如(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内置函数)。
您可以使用openv源代码发行版中的adaptors.py中的cv2array()/array2cv()
函数,并使用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