一:函数API
1:createTrackbar
int createTrackbar(
const String &trackbarname,
const String &winname,
int* value,
int count,
TrackbarCallback onChange=0,
void* userdata=0
);
2:setTrackbarPos
setTrackbarPos (
const String &trackbarname,
const String &winname,
int pos
);
二:代码演示
1:BGR调色盘
import cv2
import numpy as np
def mcallback(event,x,y,flags,userdata):
pass
cv2.namedWindow('trackbar', cv2.WINDOW_AUTOSIZE)
cv2.resizeWindow('trackbar', 640, 480)
cv2.createTrackbar('R',"trackbar",0,255,mcallback)
cv2.createTrackbar('G',"trackbar",0,255,mcallback)
cv2.createTrackbar('B',"trackbar",0,255,mcallback)
img=np.zeros((480,640,3),np.uint8)
while True:
r=cv2.getTrackbarPos('R','trackbar')
b=cv2.getTrackbarPos('B','trackbar')
g=cv2.getTrackbarPos('G','trackbar')
img[:]=[b,g,r]
cv2.imshow('trackbar',img)
key=cv2.waitKey(10)
if(key&0xff==ord('q')):
break
cv2.destroyAllWindows()
如果觉得终端有标红不好看,可以将回调函数改成: def mcallback(event):
输出
2:特定颜色区域提取
import cv2
import numpy as np
def mcallback(x):
pass
cv2.namedWindow("Tracking")
cv2.createTrackbar("LH", "Tracking", 35, 255, mcallback)
cv2.createTrackbar("LS", "Tracking", 43, 255, mcallback)
cv2.createTrackbar("LV", "Tracking", 46, 255, mcallback)
cv2.createTrackbar("UH", "Tracking", 77, 255, mcallback)
cv2.createTrackbar("US", "Tracking", 255, 255, mcallback)
cv2.createTrackbar("UV", "Tracking", 255, 255, mcallback)
while True:
img = cv2.imread(r"C:\Users\DMr\Pictures\text\book.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
l_h = cv2.getTrackbarPos("LH", "Tracking")
l_s = cv2.getTrackbarPos("LS", "Tracking")
l_v = cv2.getTrackbarPos("LV", "Tracking")
u_h = cv2.getTrackbarPos("UH", "Tracking")
u_s = cv2.getTrackbarPos("US", "Tracking")
u_v = cv2.getTrackbarPos("UV", "Tracking")
l_g = np.array([l_h, l_s, l_v])
u_g = np.array([u_h, u_s, u_v])
mask = cv2.inRange(hsv, l_g, u_g)
res = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow("img", img)
cv2.imshow("mask", mask)
cv2.imshow("res", res)
key = cv2.waitKey(10)
if(key & 0xff == ord('q')):
break
cv2.destroyAllWindows()
输出
为什么分离出的通道都是黑白灰,而不是红绿蓝?
原因是分离后为单通道,相当于分离通道的同时把其他两个通道填充了相同的数值。比如红色通道,分离出红色通道的同时,绿色和蓝色被填充为和红色相同的数值,这样一来就只有黑白灰了。
那么绿色体现在哪呢?可以进行观察,会发现原图中颜色越接近绿色的地方在绿色通道越接近白色。
在纯绿的地方在绿色通道会出现纯白。
G值为255 ->BGR(255,255,255),为纯白抽空会把hsv的学习笔记会给大家补上,最近在实习
OpenCV学习五:色彩空间转换
补上了2022/8/2 15:51每日”大饼”:
愿每个人都能遵循自己的时钟 做不后悔的选择Original: https://blog.csdn.net/weixin_52051554/article/details/126018160
Author: 氿 柒
Title: OpenCV快速入门四:TrackBar控件(滑动条)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/702387/
转载文章受原作者版权保护。转载请注明原作者出处!