用opencv時,你一定遇到過手動調參的場景,是不是很麻煩?
我覺得麻煩,用opencv裡面自帶的滑動條動態控制參數,豈不是很香?
1.創建滑動條
cv2.createTrackbar('Threshold', 'image', 0, 255, updateThreshold)
功能:
綁定滑動條和窗口,定義滾動條的數值。
第一個參數是滑動條的名字,
第二個參數是滑動條被放置的窗口的名字,
第三個參數是滑動條默認值,
第四個參數時滑動條的最大值,
第五個參數時回調函數,每次滑動都會調用回調函數
2. 設置滑動條默認值(其實比較雞肋,因為在創建滑動條的時候就可以設置默認值了)
cv2.setTrackbarPos('Threshold', 'image', 80)
第一個參數是滑動條的名字,
第二個參數是滑動條被放置的窗口的名字,
第三個參數是滑動條默認值;
3. 獲取滑動條的值
threshold = cv2.getTrackbarPos('Threshold', 'image')
第一個參數是滑動條的名字,
第二個參數是滑動條被放置的窗口的名字,
4. 設計回調函數
每次修改滑動條的值後,就會觸發回調函數的執行。
回調函數是靈魂,不多說了,看我的例子吧。
5. 完整例子
import cv2
threshold = 80
img_path = r"C:\Users\admin\Desktop\1.jpg"
img = cv2.imread(img_path)
img1 = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
img2 = img1.copy()
# 創建回調函數
def updateThreshold(x):
# global一定要有的,這樣才能修改全局變量
global threshold, img1, img2
# 得到阈值
threshold = cv2.getTrackbarPos('Threshold', 'image')
ret, img1 = cv2.threshold(img2, threshold, 255, 0)
print("threshold:",threshold)
# 創建窗口和滑動條
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.createTrackbar('Threshold', 'image', 0, 255, updateThreshold)
# 設置滑動條默認值
cv2.setTrackbarPos('Threshold', 'image', 80)
# 不斷刷新顯示
while (True):
cv2.imshow('image', img1)
if cv2.waitKey(1) == ord('q'):
break
cv2.destroyAllWindows()