主要是 createTrackbar 和 getTrackbarPos的使用,在配合 opencv 用這些繪圖函數就可以完成簡單的繪制 圖闆功能。
主要使用了opencv gui功能,涉及到了下面幾個函數:
1. cv2.createTrackbar, 創建滑動條:用法: cv2.createTrackbar(trackbarName, windowName, value, count, onChange), 參數: trackbar_name trackbar的名字 window_name trackbar父窗口的名字 函數cvGetTrackbarPos返回指定trackbar的當前位置。 示例用法:在窗口 “image”上,創建名稱為 “R”的軌迹,最小值為0,最大值為255, 回調函數為 callback(這裡回調函數沒有起作用,隻是起到占位的作用)。 cv2.createTrackbar('R','image',0, 255, callback)
2. cv2.getTrackbarPos, 獲取軌迹數值用法:cv.getTrackbarPos(trackbarname, winname) 參數: trackbarname:軌迹欄名稱 winname:作為軌迹欄父級的窗口的名稱。 示例:獲取軌迹“R”的值,這個值就是滑動條在滑動過程中的數值, r = cv2.getTrackbarPos('R','image')
3. cv2.circle, 畫圓用法: cv2.circle(image, center_coordinates, radius, color, thickness) 參數: image:它是要在其上繪制圓的圖像。 center_coordinates:它是圓的中心坐标。坐标表示為兩個值的元組,即(X坐标值,Y坐标值)。 radius:它是圓的半徑。 color:它是要繪制的圓的邊界線的顔色。對于BGR,我們通過一個元組。例如:(255,0,0)為藍色。 thickness:它是圓邊界線的粗細像素。厚度-1像素将以指定的顔色填充矩形形狀。
white_img = np.zeros((300,300,3), np.uint8)
white_img[:] = [255,255,255]
cv2.circle(white_img, (150, 150), 100, (0, 255,255), 2) ## 半徑 100, 圓環寬2pixel
4. cv2.rectangle, 繪制矩形:
cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift ) 參數表示依次為: (圖片,長方形框左上角坐标, 長方形框右下角坐标, 字體顔色,字體粗細) 在圖片img上畫長方形,坐标原點是圖片左上角,向右為x軸正方向,向下為y軸正方向。左上角(x,y),右下角(x,y) ,顔色(B,G,R), 線的粗細 lineType: lineType:可以取的值有cv2.LINE_4,cv2.LINE_8,cv2.LINE_AA。其中cv2.LINE_AA的AA表示抗鋸齒,線會更平滑。
5. 顔色一個簡單的繪圖闆
def demo():
def callback(x):
pass
# 創建圖像
img = np.zeros((300, 512, 3), np.uint8)
cv2.namedWindow('image') ## 創建窗口image
switch = 'ON:\nOFF' ## 開關定義,默認開啟(0)
## 創建軌迹:
cv2.createTrackbar(switch, 'image', 0, 1, callback)
cv2.createTrackbar('R', 'image', 180, 255, callback)
cv2.createTrackbar('G', 'image', 0, 255, callback)
cv2.createTrackbar('B', 'image', 0, 255, callback)
while True:
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[:] = [b, g, r]
else:
print("繪圖功能已關閉")
img[:] = [255, 255, 255] ## 轉為白色
cv2.destroyAllWindows()
6.增加繪圖功能
我們基于上述功能進行了改進,又添加添加了橡皮擦功能,可以繪圖、還可以寫毛筆字[摳鼻]。 大家可以通過下面的視頻感受一下:
視頻寫毛筆字:
繪圖
以上就是本次分享的内容,是不是非常簡單呢?歡迎在評論區交流和讨論。
備注:免費獲取源碼,請評論區回複666。
,