python opencv入門 捲軸控制調色盤(5)__python

來源:互聯網
上載者:User

內容來自OpenCV-Python Tutorials 自己翻譯整理

目標:
使用捲軸綁定視窗
學習如下函數 cv2.getTrackbarPos(), cv2.createTrackbar()

範例代碼:
這裡建立了一個簡單的範例來現實使用者指定的顏色。使用者使用三個捲軸來指定B,G,R值,同時使用者選擇的顏色會顯示在視窗當中。使用者拖動捲軸會關聯到視窗中顏色的改變。初始預設的顏色會被設定為黑色。
對於cv2.getTrackbarPos()函數,第一個參數是捲軸的名稱,第二個個參數是關聯的視窗名稱,第三個參數是預設值,第四個參數是是最大值,第五個參數是執行所有改變值的回呼函數。回呼函數總是有一個預設參數,這個參數是捲軸的位置。在本例子當中,函數該函數不做任何事情,簡單略過即可。
捲軸另外一個重要的應用是用來作為按鈕或者開關。預設情況下,opencv裡面沒有按鈕功能。所以使用者需要使用捲軸來實現這樣的一個功能。在本例子當中,我們建立了一個開關,這個開關控制這個應用程式的顏色變化功能是否開啟,如果開關功能關閉,那麼螢幕一直都是黑色的。

import cv2import numpy as npdef nothing(x):    pass# 建立一個黑色背景的視窗img = np.zeros((300,512,3), np.uint8)cv2.namedWindow('image')# 建立改變顏色的捲軸cv2.createTrackbar('R','image',0,255,nothing)cv2.createTrackbar('G','image',0,255,nothing)cv2.createTrackbar('B','image',0,255,nothing)# 建立控制函數的開關switch = '0 : OFF \n1 : ON'cv2.createTrackbar(switch, 'image',0,1,nothing)while(1):    cv2.imshow('image',img)    k = cv2.waitKey(1) & 0xFF    if k == 27:        break    # 擷取四個捲軸的位置    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.destroyAllWindows()

練習:
建立一個畫圖程式,這個程式可以調整顏色和畫刷的半徑。使用捲軸調整。

import cv2import numpy as np# mouse callback functiondef nothing(x):    passdef draw_circle(event,x,y,flags,param):    s=cv2.getTrackbarPos('size','image')    b=cv2.getTrackbarPos('B','image')    r=cv2.getTrackbarPos('R','image')    g=cv2.getTrackbarPos('G','image')    if event == cv2.EVENT_LBUTTONDBLCLK:        cv2.circle(img,(x,y),s,(b,g,r),-1)# Create a black image, a window and bind the function to windowimg = np.zeros((512,512,3), np.uint8)cv2.namedWindow('image')cv2.createTrackbar('R','image',0,255,nothing)cv2.createTrackbar('G','image',0,255,nothing)cv2.createTrackbar('B','image',0,255,nothing)cv2.createTrackbar('size','image',1,255,nothing)cv2.setMouseCallback('image',draw_circle)while(1):    cv2.imshow('image',img)    if cv2.waitKey(20) & 0xFF == 27:        breakcv2.destroyAllWindows()

雙擊畫圈

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.