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

时间:2011-04-23 07:28:15

标签: python opencv numpy

使用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>

1 个答案:

答案 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