python - 使用python接口(interface)快速处理opencv图像像素

标签 python opencv numpy

使用 OpenCV 的 python 接口(interface),可以使用 [] 运算符轻松访问图像的像素,如下所示:

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

variable pixel 这里是一个python tuple object like (10,20,30) (例如3 channel ),不是很便于处理计算,因为元组类型不支持运算符“-”或“+”。如果我希望对像 255 - (10,20,30) 这样的像素进行子结构化,我必须 代码如下:

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

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

最佳答案

您可以使用 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

关于python - 使用python接口(interface)快速处理opencv图像像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5762906/

相关文章:

python - Numpy sum(Numpy 1.15.4,与 MKL 链接)

python - 为什么这个 "operable function"的 python 实现会失败?

python - beautifulsoup python 如何循环遍历表格中的单元格并查找<a>链接</a>

python - 如何获取列表的反向副本(在 .reverse 之后链接方法时避免使用单独的语句)?

opencv - 图像中的箭头分割

python - 使用 numpy block (切片)表示法动态获取子矩阵

python genfromtxt问题

python - 使用摄像头或 IP 摄像头加快网络设备的视频播放速度

c++ - 编译一个c工程到最小尺寸

python - 根据索引数组对值求和