openCV学习笔记(二)---openCV系列基本操作(2)

基本操作之五:通过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()
openCV学习笔记(二)---openCV系列基本操作(2)_第1张图片

基本操作之五:截取图片中的部分放置到任意位置。

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()

openCV学习笔记(二)---openCV系列基本操作(2)_第2张图片

基本操作之六:图片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()
openCV学习笔记(二)---openCV系列基本操作(2)_第3张图片 openCV学习笔记(二)---openCV系列基本操作(2)_第4张图片

基本操作之七:通过权重计算合并两张图。

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()
openCV学习笔记(二)---openCV系列基本操作(2)_第5张图片
openCV学习笔记(二)---openCV系列基本操作(2)_第6张图片


你可能感兴趣的:(opencv)