聲明:這裏是本人自學opencv時寫下來的筆記。同時參考並感謝up主【致敬大神】。在她視頻基礎進行修改加上本身理解補充。目的是爲了更好的進步與學習。若有更多學習經驗和知識分享,歡迎評論,謝謝。python
同時歡迎你們關注新博主github:https://github.com/Cqy-96 b站:https://space.bilibili.com/301389626【陽ger陽】git
學習opencv畫圖直線、圓、橢圓、矩形、不規則圖形。github
函數:cv.line()、cv.circle()、cv.rectangle()、cv.ellipse()、cv.putText()eclipse
實戰:用opencv畫opencv logo的標誌函數
python學習
numpy字體
matplotlibui
下面呢咱們就開始學這幾個函數了。。。。。。spa
函數:cv.line(img,pt1,pt2,thickness,lineType,shift)code
img: 要繪製線段的圖像。
pt1: 線段的起點。
pt2: 線段的終點。
color: 線段的顏色.
thickness: 線條的寬度。
lineType: 線段的類型。能夠取值8, 4, 和CV_AA, 分別表明8鄰接鏈接線,4鄰接鏈接線和反鋸齒鏈接線。默認值爲8鄰接。爲了得到更好地效果能夠選用CV_AA(採用了高斯濾波)。
shift: 座標點小數點位數。
實戰:
import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 讀取一張白底圖片 # 也能夠本身用numpy繪製一個圖片 # img=np.ones((500,500,3),np.uint8) img=cv.imread("F:\opencv learn\logo.jpg") #在圖中畫出一條直線 cv.line(img,(0,0),(500,500),(0,255,0),5)
cv.imshow("img",img)
plt.show()
cv.waitKey()
cv.destroyAllWindows()
效果:
函數:cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
例:cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
參數解釋
第一個參數:img是原圖
第二個參數:(x,y)是矩陣的左上點座標
第三個參數:(x+w,y+h)是矩陣的右下點座標
第四個參數:(0,255,0)是畫線對應的rgb顏色
第五個參數:2是所畫的線的寬度
實戰:
import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 讀取一張白底圖片 # 也能夠本身用numpy繪製一個圖片 # img=np.ones((500,500,3),np.uint8) img=cv.imread("F:\opencv learn\logo.jpg") # 畫一個方形 cv.rectangle(img,(380,0),(500,250),(255,0,0),4) cv.imshow("img",img) cv.waitKey() cv.destroyAllWindows()
效果:
函數:cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]])
參數解釋:
img:要畫的圓所在的矩形或圖像
center:圓心座標,如 (100, 100)
radius:半徑,如 10
color:圓邊框顏色,如 (0, 0, 255) 紅色,BGR
thickness:正值表示圓邊框寬度. 負值表示畫一個填充圓形
lineType:圓邊框線型,可爲 0,4,8
shift:圓心座標和半徑的小數點位數
實戰:
import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 讀取一張白底圖片 # 也能夠本身用numpy繪製一個圖片 # img=np.ones((500,500,3),np.uint8) img=cv.imread("F:\opencv learn\logo.jpg") #畫一個圓 cv.circle(img,(200,200),50,(0,0,255),4) cv.imshow("img",img) cv.waitKey() cv.destroyAllWindows()
效果:
(4)畫橢圓
函數:cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift)
注意:cv.eclipse()函數比較複雜必定要理解清楚每一個參數
img:須要繪圖的圖像
center:橢圓中心點座標
axes:橢圓尺寸(即長短軸)
angle:旋轉角度(順時針方向)
startAngle:繪製的起始角度(順時針方向)
endAngle:繪製的終止角度(例如,繪製整個橢圓是0,360,繪製下半橢圓就是0,180)
color:線條顏色(BGR)
thickness:線條粗細(默認值=1)
lineType:線條類型(默認值=8)
shift:圓心座標點和數軸的精度(默認值=0)
爲了更好理解angle、startangle、endtangle這三個參數 我來分別演示,先看整體的一張圖
實戰:
import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 讀取一張白底圖片 # 也能夠本身用numpy繪製一個圖片 # img=np.ones((500,500,3),np.uint8) img=cv.imread("F:\opencv learn\logo.jpg") # 畫橢圓 cv.ellipse(img,(200,100),(100,50),0,0,360,(0,255,0),4) cv.imshow("img",img) cv.waitKey() cv.destroyAllWindows()
效果:
關於angle參數:代碼中我默認的是0,爲了效果我修改爲60
img1=cv.ellipse(img,(200,100),(100,50),0,0,360,(0,255,0),4)
img2=cv.ellipse(img,(200,100),(100,50),60,0,360,(255,0,0),4)
關於startangle、endtangle這兩個參數,一樣經過實例來演示一下。
img1=cv.ellipse(img,(200,100),(100,50),0,0,180,(0,255,0),4)
img1=cv.ellipse(img,(200,300),(100,50),0,0,360,(255,0,0),4)
函數:cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3)
各參數依次是:圖片,添加的文字,左上角座標,字體,字體大小,顏色,字體粗細
實戰:
import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 讀取一張白底圖片 # 也能夠本身用numpy繪製一個圖片 # img=np.ones((500,500,3),np.uint8) img=cv.imread("F:\opencv learn\logo.jpg") # 編輯文字 font=cv.FONT_HERSHEY_SIMPLEX cv.putText(img,"image",(200,150),font,2,(0,255,255),4) cv.imshow("image",img) cv.waitKey() cv.destroyAllWindows()
效果:
以上呢就是本次學習的所有任務、我的理解、若有不足歡迎指正!
覺得結束了???接下來就是展現真正技能的時候了,哈哈哈!
以下:
代碼:
import cv2 as cv import numpy as np import matplotlib.pyplot as plt import math # 設置基本參數 (如圖所示) W=500 Height=int(1.3*W) D=0.2*W O=(int(W/2),int(W/2)) # 大圓的參數 A=(int(W/2),int(W/2-D)) B=(int(W/2-math.sqrt(3)/2*D),int(W/2+D/2)) C=(int(W/2+math.sqrt(3)/2*D),int(W/2+D/2)) R=int(2*math.sqrt(3)/5*D)#大圓半徑 #小圓參數 #同心圓 座標一致 r=int(math.sqrt(3)/5*D) # 扇形參數 角度 ang=60 # 讀取一張白底圖片 src=cv.imread("F:\opencv learn\logo.jpg") #畫大圓 cv.circle(src,A,R,(0,0,255),-1) cv.circle(src,B,R,(0,255,0),-1) cv.circle(src,C,R,(255,0,0),-1) # 畫小圓 cv.circle(src,A,r,(255,255,255),-1) cv.circle(src,B,r,(255,255,255),-1) cv.circle(src,C,r,(255,255,255),-1) # 畫扇形 cv.ellipse(src,A,(R,R),ang,0,ang,(255,255,255),-1) cv.ellipse(src,B,(R,R),360-ang,0,ang,(255,255,255),-1) cv.ellipse(src,C,(R,R),360-2*ang,0,ang,(255,255,255),-1) # 加文字 font=cv.FONT_HERSHEY_SIMPLEX cv.putText(src,"opencv",(40,450),font,4,(0,0,0),10) # 顯示 cv.imshow("opencv-logo",src) cv.namedWindow("opencv-logo",cv.WINDOW_AUTOSIZE) cv.waitKey() cv.destroyAllWindows()
效果:
建議本身要把公式推明白、在獨自敲代碼、這樣纔有進步!感謝b站【致敬大神】讓偶學了很多!
【實踐是檢驗真理的惟一標準】