Python Opencv中对于图片的处理
先看成效:
处理前:
处理后:
再来一张:
OK,现在来瞧一瞧如何使用超级简单的方法实现这一处理:
首先,基本的导入模块:
import cv2
import numpy as np
下一步,自然是载入图片:
image = cv2.imread("01.jpg", cv2.IMREAD_COLOR)
然后把它显示出来:
cv2.imshow("Work", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
咋一看,处理呢?别急,现在开始写.
def handle_image(img, size, color):
for x in range(size[0][0], size[1][0]):
for y in range(size[0][1], size[1][1]):
for rgb in range(3):
c = img.item(x, y, rgb)
c += color[rgb]
c = 0.5*c
img.itemset((x, y, rgb), c)
我们来分析一下这段代码:
第一行 def handle_image(img, size, color):
img 就是要处理的矩阵,也就是窗口
size也就是要进行透明处理的范围,是一个数组,结构:[[左上角横坐标,左上角纵坐标],[右下角横坐标,右下角纵坐标]],即[[x1,y1],[x2,y2]]
color自然就是有色玻璃的颜色了
第二行 for x in range(size[0][0], size[1][0]):
进行一个循环,从x1到x2
第三行 for y in range(size[0][1], size[1][1]):
一样的道理
第四行 for rgb in range(3):
通道的循环
自此,该循环已将size中的所有像素的RGB都遍历了一遍
接下来就很简单了,
先获得(x,y)这像素rgb的值(这里的rgb其实只为其中一个)
c = img.item(x, y, rgb)
将有色玻璃的对应的值与原颜色值相加
c += color[rgb]
颜色相加原则,再除以2
c = 0.5*c
然后把它写回去
img.itemset((x, y, rgb), c)
这样,就完成了>>>>>>>
来,放全部代码:
import cv2
import numpy as np
RED = (0, 0, 255)
GREEN = (0, 255, 0)
def handle_image(img, size, color):
for x in range(size[0][0], size[1][0]):
for y in range(size[0][1], size[1][1]):
for rgb in range(3):
c = img.item(x, y, rgb)
c += color[rgb]
c = 0.5*c
img.itemset((x, y, rgb), c)
# image = np.zeros([600, 600, 3])
# cv2.circle(image, (300, 300), 100, GREEN, 5)
image = cv2.imread("01.jpg", cv2.IMREAD_COLOR)
handle_image(image, ((100, 100), (500, 500)), (100, 145, 162))
cv2.imshow("Work", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码中注释的两行说明…
对,只要是图像,都可以处理!
哈哈,数了数才25行代码,
嗯,人生苦短,我用python.