今天我们学习如何将图片堆叠以及使用轨迹栏调整HSV值来过滤颜色
图片堆叠
首先导入需要的库
#导入CV2库q
import cv2.cv2 as cv2
#导入numpy库
import numpy as np
然后我们读取想要堆叠的图片,然后使用numpy的功能函数进行图像的堆叠,可以选择不同的堆叠方式,而且堆叠的图像不需要选择相同图像,这里只是方便将相同的图像进行堆叠
#读取图片
img = cv2.imread('mofang.jpg')
#利用np.vstack():在竖直方向上堆叠 np.hstack():在水平方向上平铺
imgHor = np.hstack((img,img))
imgVer = np.vstack((img,img))
最后将处理好的图片进行显示
#显示图片效果
cv2.imshow('Horizomtal',imgHor)
cv2.imshow('Veritical',imgVer)
#对图片进行延时
cv2.waitKey(0)
最终显示的结果
(横向堆叠)
(纵向堆叠)由于图像较大显示不完整,我们可以调整图片的大小或者调整显示的大小
使用轨迹栏调整HSV值
也是同样导入需要的库
#导入CV2库q
import cv2.cv2 as cv2
#导入numpy库
import numpy as np
其次我们需要创建轨迹栏实现我们调整HSV的值(创建轨迹栏窗口、设置轨迹栏窗口大小以及轨迹栏的内容)由于我们是调整HSV值,所以我们的轨迹栏的内容为HSV的最大最小值,其中我们没有用到回调函数,所以我们设置成一个空函数,注意我们调用的函数需要在调用的前面,否则会出现错误
def empty(a):
pass
#对设置的轨迹栏窗口设置名称 大小
cv2.namedWindow('TrackBars')
cv2.resizeWindow('TrackBars',720,330)
#对轨迹栏内容进行创造 名称 窗口 最小值 最大值 回调函数
cv2.createTrackbar('Hue Min','TrackBars',0,255,empty)
cv2.createTrackbar('Hue Max','TrackBars',255,255,empty)
cv2.createTrackbar('Sat Min','TrackBars',0,255,empty)
cv2.createTrackbar('Sat Max','TrackBars',255,255,empty)
cv2.createTrackbar('Val Min','TrackBars',0,255,empty)
cv2.createTrackbar('Val Max','TrackBars',255,255,empty)
最后我们需要导入想要调整的图片,并且在while循环里实时读取我们设置的轨迹栏的值,并且将该值进行HSV的掩膜,然后显示我们的图像
#读取图片
img = cv2.imread('mofang2.jpg')
#对下面进行while循环
while True:
#将其BGR颜色转换为HSV 色调(H),饱和度(S),明度(V)
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#获取创造的轨迹栏的数据 注意:名字和窗口名必须得相同
h_min = cv2.getTrackbarPos('Hue Min', 'TrackBars')
h_max = cv2.getTrackbarPos('Hue Max', 'TrackBars')
s_min = cv2.getTrackbarPos('Sat Min', 'TrackBars')
s_max = cv2.getTrackbarPos('Sat Max', 'TrackBars')
v_min = cv2.getTrackbarPos('Val Min', 'TrackBars')
v_max = cv2.getTrackbarPos('Val Max', 'TrackBars')
print(h_min,h_max,s_min,s_max,v_min,v_max)
#设置调节的最大值和最小值
lower = np.array([h_min,s_min,v_min])
upper = np.array([h_max,s_max,v_max])
#利用cv2.inRange函数设阈值,去除背景部分 原图 最低值 最高值
#将低于lower和高于upper的部分分别变成0,lower~upper之间的值变成255
mask = cv2.inRange(imgHSV,lower,upper)
imgResult = cv2.bitwise_and(img,img,mask=mask)
# img1 = np.hstack((img, imgHSV))
# img2 = np.hstack((img1, imgResult))
# #显示原图 HSV图 轨迹栏
cv2.imshow('Original', img)
cv2.imshow('HSV', imgHSV)
cv2.imshow('Mask', mask)
cv2.imshow('Result',imgResult)
# cv2.imshow('Img3',img2)
#因为加入了while循环,将延时无穷变为1ms
cv2.waitKey(1)
最终的结果图如下
(原图)
(HSV图)
(掩膜图)
(最终结果图)该图就是将其掩膜图与原图进行结合显示,利用imgResult = cv2.bitwise_and(img,img,mask=mask)功能函数进行实现