opencv基礎學習 小知識--繪圖函式+小實戰訓練
宣告:這里是本人自學opencv時寫下來的筆記,同時參考并感謝up主【致敬大神】,在她視頻基礎進行修改加上自己理解補充,目的是為了更好的進步與學習,如有更多學習經驗和知識分享,歡迎評論,謝謝,
同時歡迎大家關注新博主github:https://github.com/Cqy-96 b站:https://space.bilibili.com/301389626【陽ger陽】
1、學習目標
學習opencv畫圖直線、圓、橢圓、矩形、不規則圖形,
函式:cv.line()、cv.circle()、cv.rectangle()、cv.ellipse()、cv.putText()
實戰:用opencv畫opencv logo的標志
2、用到的庫
python
numpy
matplotlib
下面呢我們就開始學這幾個函式了,,,,,,
(1)畫直線
函式:cv.line(img,pt1,pt2,thickness,lineType,shift)
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()
效果:

(2)畫方形
函式: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()
效果:

(3)畫圓
函式: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)

(5)添加文字(說白了就是在你輸入的圖片中添加你想添加的文字以表示說明)
函式: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()
效果:

以上呢就是本次學習的全部任務、個人理解、如有不足歡迎指正!
以為結束了???接下來就是展示真正技能的時候了,哈哈哈!
繪制opencv的logo

如下:


代碼:
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=https://www.cnblogs.com/Cqy-96/p/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站【致敬大神】讓偶學了不少!
【實踐是檢驗真理的唯一標準】
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/10455.html
標籤:其他
