使用python-interface for OpenCV,可以使用[]运算符轻松访问图像像素,如下所示:
img = cv.LoadImage('test.jpg')
pixel = img[10,10]
变量像素这里是一个 python tuple 对象,例如(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内置函数)。 / p>
答案 0 :(得分:3)
您可以在opencv源代码发行版中使用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