前言
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
作者:大Z
在影像中我們經常需要用到將某個區域特征畫出來,比如物體檢測,物體追蹤等等,今天來看看有哪些好玩的繪圖工具吧!
▼畫線
首先要為畫的線創造出環境,就要生成一個空的黑底影像,我們使用numpy進行實驗:
import cv2 import numpy as np img=np.zeros((512,512,3), np.uint8) cv2.imshow("img",img) cv2.waitKey(0) cv2.destroyAllWindows()
這是黑色的底,我們的畫布,我把視窗名叫做img,np.zeros()有兩個引數,一個是創建的圖片矩陣大小,另一個是資料型別,512,512是像素(第一個512像素高,第二個是512像素寬),3指BGR三種顏色,uint8是用0-255表示所有顏色,
我們看一下畫線函式的原型:
cv2.line(img,start,end,color,thickness)
函式實體:
cv2.line(img,(0,0),(511,511),(255,0,0),5)
這個函式有5個引數,分別為:img是影像名稱,(0,0)為起點坐標,(511,511)為終點坐標,(255,0,0)是藍色,5是線的寬度,
會畫一條從左上方到右下角的藍色線段,我們看實驗效果↓:
▼畫矩形
畫矩形函式將是十分重要的環節,在以后的實際操作專案中,我們基本上就會發現,OpenCV使用最多的繪圖函式,就是畫矩形函式,它使用范圍非常廣泛,包括畫輪廓,實時跟蹤目標時我們也是使用畫矩形函式對跟蹤的目標進行標注,接下來我們先了解一下矩形函式:
cv2.rectangle(img,(50,50),(400,400),(0,0,255),3)
這個函式有5個引數,img為影像名稱,(50,50)為左上頂點坐標,(400,400)為右下頂點坐標,(0,255,0)代表綠色,線寬為3,
畫矩形兩個要素:左上頂點和右下頂點坐標,
我們來看一下代碼:
import cv2 import numpy as np img = np.zeros((512, 512, 3), np.uint8) cv2.rectangle(img,(50,50),(400,400),(0,0,255),3) cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows()
實驗效果↓:
▼畫圓
函式:
cv2.circle(img,(447,63), 63, (0,0,255), -1)
這個函式有5個引數:影像名稱,圓心坐標,半徑63,(0,0,255)紅色,線寬為-1.當線寬-1時,表示封閉圖形的顏色填充,
畫圓的兩要素:指定圓形的中心點坐標和半徑大小,
代碼:
import cv2 import numpy as np img=np.zeros((512,512,3), np.uint8) cv2.circle(img,(256,256), 63, (0,0,255), -1) cv2.imshow("img",img) cv2.waitKey(0) cv2.destroyAllWindows()
演示效果↓:
▼畫橢圓
函式原型:
cv2.ellipse(img,center,axes,angle,start_angle,end_angle,color,thickness,line_type,shift)
img是操作的圖片、center是橢圓的中心的,axes是橢圓的長軸和短軸、angle是偏轉角度、start_angle和end_angle分別是圓弧的起始角度和終結角度、color是線條顏色、thickness是線條粗細程度、line_type是線條的型別、shift是圓心坐標點和數軸的精度,
給出一個函式實體:
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
這個函式有8個引數:img為影像名稱,(256,256)為中心點坐標,100為長軸長度,50為短軸長度,0旋轉角度,影像出現的部分(長軸順時針方向起始的角度和結束角度)0,180是下半個橢圓,顏色陣列這里255是藍色,-1則為實心,大于0的數值則為空心,線條寬度由自己決定,
畫橢圓的幾個要素:中心點的位置坐標;長軸和短軸的長度;橢圓沿逆時針方向旋轉的角度;長軸順時針方向起始的角度和結束角度,
代碼:
import cv2 import numpy as np img=np.zeros((512,512,3), np.uint8) cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1) cv2.imshow("img",img) cv2.waitKey(0) cv2.destroyAllWindows()
演示效果↓:
現在我們畫出整個橢圓,將代碼中倒數第三個引數由180修改為360就可以了:
cv2.ellipse(img,(256,256),(100,50),0,0,360,255,-1)
若想畫出空心圓,只需要將最后一個引數修改為正值,即為線寬:
cv2.ellipse(img,(256,256),(100,50),0,0,360,255,4)
效果↓:
▼畫多邊形
OpenCV中可以通過API進而畫出多邊形,其函式實體為:
pts=np.array([[20,20],[350,40],[420,400],[60,420]], np.int32) pts = pts.reshape((-1,1,2)) img = cv2.polylines(img,[pts],True,(0,255,0),2)
cv2. polylines()有5個引數:影像名稱,頂點串列(這個多邊形在array中有四個頂點),True表示閉合,(0,255,255)是黃色,3是線寬,pts則是使用numpy構建的四個頂點的陣列,這個陣列的資料型別必須為 int32,
代碼:
import cv2 import numpy as np img = np.zeros((512, 512, 3), np.uint8) pts=np.array([[20,20],[350,40],[420,400],[60,420]], np.int32) pts=pts.reshape((-1,1,2)) cv2.polylines(img,[pts],True,(0,255,0),2) cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows()
效果演示↓:
如果我修改頂點陣列的順序,就會得到不一樣的結果:
pts=np.array([[20,20],[350,40],[60,420],[420,400]], np.int32)
效果↓:
▼在圖片上添加文字
使用OpenCV我們可以在影像上添加文字,函式實體為:
font=cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img,'OpenCV',(10,250), font, 4,(255,255,255),2)
這個函式有八個引數,分別為:影像名稱、字串、坐標、字體、字號、(255,255,255)為白色、線寬為2,
當然,OpenCV是不支持添加中文的,要想添加中文的文字,可以添加中文的字庫,也可以使用PIL來進行操作,官方解釋不支持漢字是為了保持庫的簡單和輕量, 并且表明以后也不會支持中文,所以大家還是盡量使用英文,畢竟我們以后也是需要使用英文來閱讀大量的檔案的,
代碼:
import cv2 import numpy as np img=np.zeros((512,512,3), np.uint8) font=cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img,'OpenCV',(10,250), font, 4,(255,255,255),2) cv2.imshow("img",img) cv2.waitKey(0) cv2.destroyAllWindows()
效果演示↓:
至此,OpenCV的繪圖功能基本上就這些了,需要特別注意的是
所 有 的 繪 圖 函 數 的 返 回 值 都 是 None, 所 以 不 能 使 用 類似:img =cv2.line(img,(0,0),(511,511),(255,0,0),5),繪圖函式直接呼叫即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93493.html
標籤:Python
上一篇:pythont多執行緒
下一篇:基本運算子,流程控制之if判斷
