OpenCV-修改图片颜色通道并保存

读取一张图片,修改颜色通道后输出。

cv 读取进来可以获得图像的行数,列数,通道数的矩阵,对矩阵进行操作可改变图像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import cv2 as cv


def access_pixels(img):
"""访问每一个像素"""
print(img.shape)
height = img.shape[0] # 宽
width = img.shape[1] # 高
channels = img.shape[2] # 颜色通道 blue green red (bgr)
print("width:%s, height:%s, channels:%s" % (width, height, channels))

for i in range(height):
for j in range(width):
for k in range(channels):
pv = img[i, j, k]
img[i, j, k] = 255 - pv

cv.imshow('demo', img)


if __name__ == '__main__':
img = cv.imread('01image.JPG', 1)
cv.imshow('06', img)

t_start = cv.getTickCount() # 记录了系统启动以来的毫秒数 ms
access_pixels(img)
t_end = cv.getTickCount()
print("time: %s ms" % ((t_end - t_start) / cv.getTickFrequency() * 1000))

cv.waitKey(0)
cv.destroyAllWindows()

输出

可以看到总共耗时 9.4 秒,实在是太长了啊~~~~。

有没有快一点的方法呢?

当然,python 解释执行的效率是没有 C/C++ 快滴,OpenCV 是一个用 C/C++ 的开源库,里面也提供了和上面那个access_pixels函数同样功能的函数。

1
2
3
4
5
GMat cv::gapi::bitwise_not	(	const GMat & 	src	); // 函数原型
// 反转数组的每一位。函数bitwise_not计算输入矩阵的逐元素逐位反转

// 在 Python 中调用
// cv.bitwise_not(img),快乐不止一点点~~ happy

doc of func bitwise_not


文章作者: ahoj
文章链接: https://ahoj.cc/2019/07/OpenCV-修改图片颜色通道并保存/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ahoj 的小本本