2016年11月1日 星期二

OPENCV(6)--Trackbar(軌道桿)


    這篇介紹OPENCV提供的另一個基本工具Trackbar(軌道桿).可以用滑鼠拖拉改變特定的數值.
如下圖,拖拉 R,G,B Trackbar(軌道桿) 即可以更改,RGB顏色,範圍可以設定為0~255之間的數值.
Opencv 並沒有提供如Checkbox 這樣的工具,但是只要將Trackbar(軌道桿) 範圍值成0~1 ,也可以權當如checkbox的功能,當然如果需要更多一些GUI介面的元件,在Python 裡也可以利用別人提供的套件,如Tkinter ,或是PyQT 之類的.也可以跟OPENCV 套件整合在一起由Python實現.這就是Python 語言的便利性.


<圖一>當切換ON/OFF Trackbar(軌道桿) 在ON 位置時, 拉動R,G,B Trackbar(軌道桿)可以及時改變顏色




OPENCV 提供cv2.createTrackbar function 來實現 Trackbar(軌道桿) ,範例如下

cv2.createTrackbar('R','image',0,255,Change_color)

*1.'R' 為 Trackbar(軌道桿)顯示的名稱
*2.'image'為 Trackbar(軌道桿)要依附在哪一個windows 視窗,在這裡為名稱'image'的視窗
*3.0,255 為拉動桿子的數值變化範圍,在這個範例設定最小0 ,最大為255
*4.Change_color 為拉動桿子的數值變化後產生事件要執行的副程式,在這個範例副程式為
       def Change_color(x):


<Python 完整範例程式>

import cv2
import numpy as np

def Change_color(x):
 # 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')

  if s == 0:
   img[:] = 0
  else:
   img[:] = [b,g,r]
  cv2.imshow('image',img)


# Create a black image, a window
img = np.zeros((240,180,3), np.uint8)
cv2.namedWindow('image', cv2.WINDOW_NORMAL)

# create trackbars for color change
cv2.createTrackbar('R','image',0,255,Change_color)
cv2.createTrackbar('G','image',0,255,Change_color)
cv2.createTrackbar('B','image',0,255,Change_color)

# create switch for ON/OFF functionality
switch = '0 : OFF \n1 : ON'
cv2.createTrackbar(switch, 'image',0,1,Change_color)

while(1):
 k = cv2.waitKey(1) & 0xFF
 if k == 27:
  break

cv2.destroyAllWindows()





加入阿布拉機的3D列印與機器人的FB專頁
https://www.facebook.com/arbu00/