前言:Hello大家好,我是小哥談。OpenCV提供了許多用于繪制圖形的方法,包括繪制線段的line()方法、繪制矩形的retangle()方法、繪制圓形的circle()方法、繪制多邊形的polylines()方法和繪制文字的putText()方法。本節(jié)課將依次對上述各個方法進行講解,并使用上述方法繪制相應的圖形。???
?前期回顧:
? ? ? ? ? ?史上最全OpenCV常用方法及使用說明匯總,建議收藏!
? ? ? ? ? ?OpenCV基礎(chǔ)知識(1)— OpenCV概述
? ? ? ? ? ?OpenCV基礎(chǔ)知識(2)— 圖像處理的基本操作(讀取圖像、顯示圖像、保存圖像和獲取圖像屬性)
? ? ? ? ? ?OpenCV基礎(chǔ)知識(3)— 圖像數(shù)字化基礎(chǔ)(像素、色彩空間)
? ? ? ? ? ?目錄
???1.線段的繪制?
???2.矩形的繪制
???3.圓形的繪制
???4.多邊形的繪制
???5.文字的繪制
???1.線段的繪制?
Opencv提供了用于繪制線段的line()方法,使用這個方法即可繪制長短不一的、粗細各異的、五顏六色的線段。??
line()方法語法格式如下:
img = cv2.line(img,pt1,pt2,color,thickness)
參數(shù)說明:
img:畫布
pt1:線段的起點坐標
pt2:線段的終點坐標
color:繪制線段時的線條顏色
thickness:繪制線段的線條寬度
說明:??????
當線條顏色是紅色的時候,由于Opencv默認的通道順序是B-G-R,因此將使用(0,0,255)表示紅色。
Python代碼:
import numpy as np # 導入Python中的numpy模塊
import cv2
# np.zeros():創(chuàng)建了一個畫布
# (300, 300, 3):一個300 x 300,具有3個顏色空間(即Red、Green和Blue)的畫布
# np.uint8:OpenCV中的灰度圖像和RGB圖像都是以uint8存儲的,因此這里的類型也是uint8
canvas = np.zeros((300, 300, 3), np.uint8)
# 在畫布上,繪制一條起點坐標為(50, 150)、終點坐標為(250, 150),綠色的,線條寬度為10的線段
canvas = cv2.line(canvas, (50, 150), (250, 150), (0, 255, 0), 10)
# 在畫布上,繪制一條起點坐標為(50, 250)、終點坐標為(250, 250),紅色的,線條寬度為15的線段
canvas = cv2.line(canvas, (50, 250), (250, 250), (0, 0, 255), 15)
# 在畫布上,繪制一條起點坐標為(150, 50)、終點坐標為(150, 250),黃色的,線條寬度為20的線段
canvas = cv2.line(canvas, (150, 50), (150, 250), (0, 255, 255), 20)
cv2.imshow("Lines", canvas) # 顯示畫布
cv2.waitKey()
cv2.destroyAllWindows()
運行結(jié)果:
???2.矩形的繪制
OpenCV提供了用于繪制矩形的retangle()方法,使用這個方法既可以繪制矩形,也可以繪制實心矩形。??
retangle()方法的語法格式如下所示:
img = cv2.retangle(img,pt1,pt2,color,thickness)
參數(shù)說明:
img:畫布
pt1:矩形的左上角坐標
pt2:矩形的右下角坐標
color:繪制矩形時的線條顏色
thickness:繪制矩形時的線條寬度
Python代碼:
import numpy as np # 導入Python中的numpy模塊
import cv2
# np.zeros():創(chuàng)建了一個畫布
# (300, 300, 3):一個300 x 300,具有3個顏色空間(即Red、Green和Blue)的畫布
# np.uint8:OpenCV中的灰度圖像和RGB圖像都是以uint8存儲的,因此這里的類型也是uint8
canvas = np.zeros((300, 300, 3), np.uint8)
# 在畫布上繪制一個左上角坐標為(50,50),右下角坐標為(200,150)紅色的寬度為6的矩形邊框
canvas = cv2.rectangle(canvas, (50, 50), (200, 150), (0,0, 255),6)
cv2.imshow("Rectangle", canvas) # 顯示畫布
cv2.waitKey()
cv2.destroyAllWindows()
運行結(jié)果:
???3.圓形的繪制
OpenCV提供了用于繪制圓形的circle()方法,這個方法與retangle()方法的功能相同,既可以繪制圓形邊框,也可以繪制實心圓形。??
circle()方法的語法格式如下:
img = cv2.circle(img,center,radius,color,thickness)
參數(shù)說明:
img:畫布
center:圓形的圓心坐標
radius:圓形的半徑
color:繪制圓形時的線條顏色
thickness:繪制圓形時的線條寬度
Python代碼:
import numpy as np # 導入Python中的numpy模塊
import cv2
# np.zeros():創(chuàng)建了一個畫布
# (100, 300, 3):一個100 x 300,具有3個顏色空間(即Red、Green和Blue)的畫布
# np.uint8:OpenCV中的灰度圖像和RGB圖像都是以uint8存儲的,因此這里的類型也是uint8
canvas = np.zeros((100, 300, 3), np.uint8)
# 在畫布上,繪制一個圓心坐標為(50, 50),半徑為40,紅色的實心圓形
canvas = cv2.circle(canvas, (50, 50), 40, (0, 0, 255), -1)
# 在畫布上,繪制一個圓心坐標為(150, 50),半徑為40,黃色的實心圓形
canvas = cv2.circle(canvas, (150, 50), 40, (0, 255, 255), -1)
# 在畫布上,繪制一個圓心坐標為(250, 50),半徑為40,綠色的實心圓形
canvas = cv2.circle(canvas, (250, 50), 40, (0, 255, 0), -1)
cv2.imshow("TrafficLights", canvas) # 顯示畫布
cv2.waitKey()
cv2.destroyAllWindows()
?運行結(jié)果:
???4.多邊形的繪制
OpenCV提供了用于繪制多邊形的polylines()方法,使用這個方法繪制的多邊形既可以是封閉的,也可以是不封閉的。??
polylines()方法的語法格式如下:
img = cv2.polylines(img,pts,isClosed,color,thickness)
參數(shù)說明:
img:畫布
pts:由多邊形各個頂點的坐標組成的一個列表,這個列表是一個Numpy的數(shù)組類型。
isClosed:如果值為True,表示一個閉合的多邊形;如果值為False,表示一個不閉合的多邊形。
color:繪制多邊形時的線條顏色
thickness:繪制多邊形時的線條寬度
Python代碼:
import numpy as np # 導入Python中的numpy模塊
import cv2
# np.zeros():創(chuàng)建了一個畫布
# (300, 300, 3):一個300 x 300,具有3個顏色空間(即Red、Green和Blue)的畫布
# np.uint8:OpenCV中的灰度圖像和RGB圖像都是以uint8存儲的,因此這里的類型也是uint8
canvas = np.zeros((300, 300, 3), np.uint8)
# 按順時針給出等腰梯形4個頂點的坐標
# 這4個頂點的坐標構(gòu)成了一個大小等于“頂點個數(shù) * 1 * 2”的數(shù)組
# 這個數(shù)組的數(shù)據(jù)類型為np.int32
pts = np.array([[100, 50], [200, 50], [250, 250], [50, 250]], np.int32)
# 在畫布上根據(jù)4個頂點的坐標,繪制一個閉合的,紅色的,線條寬度為5的等腰梯形邊框
canvas = cv2.polylines(canvas, [pts], True, (0, 0, 255), 5)
cv2.imshow("Polylines", canvas) # 顯示畫布
cv2.waitKey()
cv2.destroyAllWindows()
運行結(jié)果:
???5.文字的繪制
OpenCV提供了用于繪制文字的putText()方法,使用這個方法不僅能夠設(shè)置字體的樣式、大小和顏色,而且能夠使字體呈現(xiàn)斜體的效果,還能夠控制文字的方向,進而使文字呈現(xiàn)垂直鏡像的效果。??
putText()方法的語法格式如下:
img = cv2.putText(img,text,org,fontFace,fontScale,color,thickness,lineType,bottomLeftOrigin)
參數(shù)說明:
img:畫布
text:要繪制的文字內(nèi)容
org:文字在畫布中的左下角坐標
fontFace:字體樣式
fontScale:字體大小
color:繪制文字時的線條顏色
thickness:繪制文字時的線條寬度
lineType:線型(指的是線的產(chǎn)生算法,有4和8兩個值,默認值為8)
bottomLeftOrigin:繪制文字時的方向(有True和False兩個值,默認值為False)
Python代碼:
import numpy as np # 導入Python中的numpy模塊
import cv2
# np.zeros():創(chuàng)建了一個畫布
# (100, 300, 3):一個100 x 300,具有3個顏色空間(即Red、Green和Blue)的畫布
# np.uint8:OpenCV中的灰度圖像和RGB圖像都是以uint8存儲的,因此這里的類型也是uint8
canvas = np.zeros((100, 300, 3), np.uint8)
# 在畫布上繪制文字“mrsoft”,文字左下角的坐標為(20, 70)
# 字體樣式為FONT_HERSHEY_TRIPLEX
# 字體大小為2,線條顏色是綠色,線條寬度為5
cv2.putText(canvas, "OpenCV", (20, 70), cv2.FONT_HERSHEY_TRIPLEX, 2, (0, 255, 0), 5)
cv2.imshow("Text", canvas) # 顯示畫布
cv2.waitKey()
cv2.destroyAllWindows()
運行結(jié)果:
文章來源:http://www.zghlxwxcb.cn/news/detail-636825.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-636825.html
到了這里,關(guān)于OpenCV基礎(chǔ)知識4 — 繪制圖形的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!