使用Python接口快速处理OpenCV图像像素

5 投票
1 回答
4252 浏览
提问于 2025-04-16 16:17

使用Python接口来操作OpenCV时,可以很方便地通过方括号[]来访问图像的像素,像这样:

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

这里的pixel是一个Python元组对象,比如(10,20,30)(这表示三个通道的颜色值),但是处理计算时就不太方便,因为元组类型不支持'-'或'+'这样的运算符。如果我想对一个像素进行减法,比如255 - (10,20,30),我必须这样写代码:

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

有没有更快更简单的解决办法呢?
还有一个问题:有没有办法对所有像素进行减法,就像在Matlab中使用矩阵减法那样:255 - img(不使用OpenCV内置的函数)。

1 个回答

3

你可以使用opencv源代码中的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

撰写回答