opencv基礎學習 小知識--繪圖+小實戰訓練

opencv基礎學習 小知識--繪圖函數+小實戰訓練

聲明:這裏是本人自學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

(1)畫直線

函數: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()

 

效果:

 

 

(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=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站【致敬大神】讓偶學了很多!

 

                                             

 

                                                                                                                                                            【實踐是檢驗真理的惟一標準】

相關文章
相關標籤/搜索