效果
最左边是一个控件栏用于修改3个通道的像素值。
imshow_img窗口显示5张图,从左到右依次是原图,红色通道图,绿色通道图,蓝色通道图,合成图。
switch,是选择将三个通道的像素值的图按或或者与进行合并。
代码如下。
import cv2
import glob
import numpy as np
def nothing(x):
pass
#图片文件夹路径 结尾必须是/或者\\
leaf_path='../学习用烟/oil/'
img_list=glob.glob(leaf_path+'*.jpg')
cv2.namedWindow('Tunning')
cv2.resizeWindow('Tunning', 100, 100)
cv2.createTrackbar('index','Tunning',0,len(img_list)-1,nothing)
cv2.createTrackbar('r_value','Tunning',100,240,nothing)
cv2.createTrackbar('r_value2','Tunning',110,255,nothing)
cv2.createTrackbar('g_value','Tunning',100,240,nothing)
cv2.createTrackbar('g_value2','Tunning',110,255,nothing)
cv2.createTrackbar('b_value','Tunning',100,240,nothing)
cv2.createTrackbar('b_value2','Tunning',110,255,nothing)
cv2.createTrackbar('swich','Tunning',0,1,nothing)
cv2.namedWindow('inshow_img')
cv2.resizeWindow('inshow_img', 1500, 600)
while True:
index = cv2.getTrackbarPos('index', 'Tunning')
r_value=cv2.getTrackbarPos('r_value', 'Tunning')
g_value = cv2.getTrackbarPos('g_value', 'Tunning')
b_value = cv2.getTrackbarPos('b_value', 'Tunning')
r_value2=cv2.getTrackbarPos('r_value2', 'Tunning')
g_value2 = cv2.getTrackbarPos('g_value2', 'Tunning')
b_value2 = cv2.getTrackbarPos('b_value2', 'Tunning')
choice_value = cv2.getTrackbarPos('swich', 'Tunning')
if (index != -1):
img = cv2.imread(img_list[index])
if b_value<b_value2:
use_b_value2=b_value2
else:
use_b_value2 = b_value+10
if r_value<r_value2:
use_r_value2=r_value2
else:
use_r_value2 = r_value+10
if g_value<g_value2:
use_g_value2=g_value2
else:
use_g_value2 = g_value+10
b_img = cv2.inRange(img[:, :, 0], b_value, use_b_value2)
g_img = cv2.inRange(img[:, :, 1], g_value, use_g_value2)
r_img = cv2.inRange(img[:, :, 2], r_value, use_r_value2)
b_imshow = cv2.cvtColor(b_img, cv2.COLOR_GRAY2BGR)
g_imshow = cv2.cvtColor(g_img, cv2.COLOR_GRAY2BGR)
r_imshow = cv2.cvtColor(r_img, cv2.COLOR_GRAY2BGR)
temp1 = np.zeros(b_img.shape, np.uint8)
temp2 = temp1.copy()
if choice_value==0:
cv2.bitwise_or(b_img,g_img,temp1)
cv2.bitwise_or(temp1,r_img,temp2)
else:
cv2.bitwise_and(b_img, g_img, temp1)
cv2.bitwise_and(temp1, r_img, temp2)
temp2_imshow = cv2.cvtColor(temp2, cv2.COLOR_GRAY2BGR)
imshow_green_hstack = np.zeros([img.shape[0], 10, img.shape[2]], np.uint8)
imshow_green_hstack[:,:,1]=255
imshow_img = np.hstack((img, imshow_green_hstack, b_imshow, imshow_green_hstack,
g_imshow,imshow_green_hstack, r_imshow,imshow_green_hstack,temp2_imshow))
imshow_all_resize = cv2.resize(imshow_img, (1600, 600))
cv2.imshow('inshow_img', imshow_all_resize)
c = cv2.waitKey(1)
if c == ord('q'):
break