Python OpenCV學習之圖形繪制總結
背景
使用OpenCV進行圖形繪制是一種必備的技能,在圖像的任務中,不管是圖像檢測還是圖像識別,我們都需要通過繪制圖形和繪制文字對處理的結果進行說明,本篇就詳細介紹下圖形的繪制;
一、畫線
line(圖像,起始點,終點,顏色,線寬,線形):一般只需要前面四個參數(shù)即可;
代碼案例:
cv2.line(img, (20, 100), (20, 500), (0,0,255))
畫出了一條Y方向上的紅色線段;
二、畫矩形
這個相對來說是應用最多的一種方法了,往往在檢測項目中返回目標的結果就是(x,y,w,h)或者(x1,y1,x2,y2)這兩種形式,當然我們這里繪制需要的是第二種形式,而通過左上角點計算右下角也是很簡單的;
cv2.rectangle(img, (x1,y1), (x2,y2), (0,0,255), 3) # 后面兩個參數(shù)為顏色和線長
簡單展示一下我用DeepFashion數(shù)據(jù)畫出矩形框的效果:
三、畫圓
畫圓在應用的其實并不多,更多的是畫點的操作,例如關鍵點的任務,需要將關鍵點在目標圖像上顯示出來;而實際上點就是一個實心圓,這里就介紹畫圓和畫點的兩種形式吧。
# 函數(shù) cv2.circle(img, (x,y), 半徑長度, (0,0,255), -1) // 畫一個實心圓(點),最后參數(shù)設置為負數(shù) cv2.circle(img, (x,y), 半徑長度, (0,0,255), 4) // 畫一個空心圓
下面還是展示我畫出關鍵點的一個效果:
四、畫多邊形
繪制多邊形在實際應用中也很常見,例如分割以及OCR的任務,往往需要用多個點描述出目標的輪廓。
函數(shù)原型如下:
polylines(img,點集,是否閉環(huán),顏色…),注意這里的點集必須是32位的
案例代碼:
pot = np.array([(100, 100), (200, 200), (300, 400)], np.int32) cv2.polylines(img, [pot], True, (0, 0, 255)) # 如果輸出填充的多邊形,用以下api cv2.fillPoly(img, [pot], (0, 0, 255))
五、畫文本
繪制文本在實際項目中,往往用來標記類別,對于一些結果輸出,可以通過文本的方式繪制到圖像上,便于觀察結果和驗證;
函數(shù)原型:
putText(img,字符串,起始點,字體,字號…)
案例代碼:
cv2.putText(img, "Hello World", (100, 100), 字體, 3, (0,0,255))
六、鼠標繪制
實現(xiàn)功能:
可通過鼠標進行基本圖形的繪制:按下l畫線,按下r畫矩形,按下c畫圓;
import cv2 import numpy as np star = (0, 0) select = 0 img = np.zeros((480, 640, 3), np.uint8) // 定義鼠標回調函數(shù) def mouse_callback(event, x, y, flags, userdata): global star,select if (event & cv2.EVENT_LBUTTONDOWN == cv2.EVENT_LBUTTONDOWN): star = (x, y) elif (event & cv2.EVENT_LBUTTONUP == cv2.EVENT_LBUTTONUP): if select == 0: cv2.line(img, star, (x, y), (0, 0, 255)) elif select == 1: cv2.rectangle(img, star, (x, y), (0, 0, 255)) elif select == 2: a = (x - star[0]) b = (y - star[1]) r = int((a**2+b**2)**0.5) cv2.circle(img, star, r, (0, 0, 255)) else: print('no shape') cv2.namedWindow('drawshape', cv2.WINDOW_NORMAL) cv2.setMouseCallback('drawshape', mouse_callback, "111") while True: cv2.imshow('drawshape', img) key=cv2.waitKey(1) & 0xFF if key == ord('q'): break elif key == ord('l'): select = 0 elif key == ord('r'): select = 1 elif key == ord('c'): select = 2
下圖是我自己隨意畫的結果,大家可以創(chuàng)造出更有趣的圖畫;
總結
常用的圖形繪制就是上面的幾種,其中中文文本還存在問題(需要引入字體樣式文件),在后續(xù)會進行補充;之后將學習圖形學的一些進階知識,也是為后續(xù)實戰(zhàn)做準備;
到此這篇關于Python OpenCV學習之圖形繪制詳解的文章就介紹到這了,更多相關Python OpenCV圖形繪制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Streamlit和Pandas實現(xiàn)帶有可點擊鏈接的數(shù)據(jù)表格
這篇文章主要為大家詳細介紹了如何利用?Streamlit?和?Pandas?在?Python?中創(chuàng)建一個帶有可點擊鏈接的數(shù)據(jù)表格,感興趣的小伙伴可以跟隨小編一起學習一下2023-11-11python實現(xiàn)Pyecharts實現(xiàn)動態(tài)地圖(Map、Geo)
這篇文章主要為大家詳細介紹了python實現(xiàn)Pyecharts實現(xiàn)動態(tài)地圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03