基本操作之五:通过trackBar调颜色
import cv2
import numpy as np
def nothing(x):
pass
# Create a black image, a window
img = np.zeros((300,512,3), np.uint8)
cv2.namedWindow('image')
# 创建一个窗口,参数为窗口名,可选参数为0(窗口可拉伸)1(窗口大小和图像相同,不可拉伸)
# create trackbars for color change
cv2.createTrackbar('R','image',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)
# 第一个参数:跟踪条的名称;
# 第二个参数:跟踪条绑定的窗口名;
# 第三个参数:跟踪条的默认值;
# 第四个参数:跟踪条的最大值;
# 第五个参数:跟踪条的回调函数,这个函数一般有一个默认的参数指定跟踪条的位置,
# 此例中函数不做任何处理,所以函数体中只需要一个pass
# create switch for ON/OFF functionality
# 创建一个开关,当为关闭(0)的时候,跟踪条就为黑色。开关打开(1)的时候,才能改变颜色。
switch = '0 : OFF \n1 : ON'
cv2.createTrackbar(switch, 'image',0,1,nothing)
while(1):
cv2.imshow('image',img)
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
# get current positions of four trackbars(获取四个跟踪条的当前位置)
r = cv2.getTrackbarPos('R','image')
g = cv2.getTrackbarPos('G','image')
b = cv2.getTrackbarPos('B','image')
s = cv2.getTrackbarPos(switch,'image')
# 当开关关闭时,image设置为黑色(底色为黑色,改变颜色无效)。
if s == 0:
img[:] = 0
else:
img[:] = [b,g,r]
# 释放窗口。
cv2.destroyAllWindows()
基本操作之五:截取图片中的部分放置到任意位置。
import cv2
import numpy as np
srcImg=cv2.imread('dog.png')
# 通过数组的截取功能,截取图片的一部分。
roiImg = srcImg[20:120,170:270]
# 将截取的一部分移位到指定的位置。
srcImg[0:100,0:100] = roiImg
cv2.namedWindow('dogImg')
cv2.imshow('dogImg',srcImg)
cv2.waitKey()
cv2.destroyAllWindows()
基本操作之六:图片split成三原色以及由三原色的图片merge成原图片;为图片设置不同的border
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('roi.jpg')
# split and merge image channel
# split:任何彩色图片都是有blue green red 三原色组合而成的
# opencv为我们提供了split方法可以把一张彩色图片分割成三原色图片。
b,g,r=cv2.split(img)
# print(b)
# print(g)
# print(r)
cv2.imshow('b',b)
cv2.imshow('g',g)
cv2.imshow('r',r)
# 看了这三张split的图片,我觉得自己怕是个色盲哦。
# sometimes,official document is better than some blog,its more clear.
# 可以分割,就一定还可以组合成一张彩色图片,所以提供了merge方法,把分为三原色的图片又组合成一张彩色图片。
mergeImage=cv2.merge((b,g,r))
cv2.imshow('merge',mergeImage)
cv2.waitKey()
cv2.destroyAllWindows()
BLUE=[255,0,0]
img1=cv2.imread('border.png')
# 为image创建border,就像photo frame:cv2.copyMakeBorder(),参数如下;
#src:image 地址
# top, bottom, left, right:border的再上下左右四个方位的宽度
# bordertype:BORDER_REPLICATE,最后边上的元素被无限延伸,eg:aaaaaa|abcdefgh|hhhhhhh
# BORDER_REFLECT:border会做镜面反射,eg:fedcba|abcdefgh|hgfedcb
# BORDER_REFLECT_101 or cv2.BORDER_DEFAULT:跟上面的镜面反射稍微有点不同的镜面反射,eg:gfedcb|abcdefgh|gfedcba
# BORDER_WRAP:55555,它说不晓得咋解释,那我咋解释,,,eg:cdefgh|abcdefgh|abcdefg
# BORDER_CONSTANT:添加一圈指定颜色的border,所以会比其他的边框类型多一个颜色的参数。
replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
基本操作之七:通过权重计算合并两张图。
import cv2
img1 = cv2.imread('1.png')
img2 = cv2.imread('2.png')
#选择的两张图片的尺寸必须一致,不然会出错。
# 通过权重计算图片合并时各自所占的比例
dst = cv2.addWeighted(img1,0.7,img2,0.3,0)
cv2.imshow('Blending',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()