Python代碼繪制幾何形狀
下面的代碼將在黑色圖像上繪制線條,橢圓,圓形,矩形,折線和文字。復(fù)制此代碼并執(zhí)行它。我們將詳細(xì)介紹代碼如何在下面工作。
import cv2
import numpy as np
# Create a black image
img = np.zeros((512, 512, 3), np.uint8)
# img = cv2.line(image, (starting point), (Ending point), (color), line thickness)
img = cv2.line(img, (0, 256), (512, 256), (255, 0, 0), 10)
# cv2.Ellipse(img, center, axes, angle, start_angle, end_angle, color, thickness=1)
img = cv2.ellipse(img,(256,256),(50,50),180,0,180,(255, 255, 0),-1)
img = cv2.ellipse(img,(256,256),(50,50),0,0,180,(0, 255, 0),-1)
# cv2.Circle(img, center, radius, color, thickness)
img = cv2.circle(img, (256, 256), 56, (0, 0, 255), 10)
# img = cv2.rectangle(image, (Top Left Corner), (Bottom Right Corner), (color), thickness)
img = cv2.rectangle(img, (189, 189), (323, 323), (0, 255, 0), 10)
# cv2.PolyLine(img, polys, is_closed, color, thickness=1)
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
img = cv2.polylines(img,[pts],True,(0,255,255))
# cv2.PutText(img, text, org, fontFace, fontScale, color, thickness, line type)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,‘OpenCV’,(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
# Create the resizeable window
cv2.namedWindow(‘image’, cv2.WINDOW_NORMAL)
cv2.imshow(‘image’, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
運(yùn)行代碼將打開(kāi)此輸出:
代碼細(xì)分
首先,我們導(dǎo)入所需的軟件包。 OpenCV包幫助我們繪制不同的幾何形狀,NumPy包允許我們創(chuàng)建一個(gè)空白圖像并進(jìn)行其他數(shù)學(xué)運(yùn)算。
import cv2
import numpy as np
接下來(lái),我們創(chuàng)建一個(gè)黑色圖像,我們可以在其上繪制幾何圖形形狀。
img = np.zeros((512, 512, 3), np.uint8)
然后我們使用 cv2.line() 函數(shù)繪制一條厚度為5像素的藍(lán)色對(duì)角線。我們將在中心左側(cè)到中間右側(cè)的黑色圖像上畫(huà)一條藍(lán)線。
cv2.line() 函數(shù)有五個(gè)參數(shù):
圖像文件
起點(diǎn)(圖像線上將開(kāi)始的位置)
結(jié)束點(diǎn)
顏色的行
行的粗細(xì)
#img = cv2.line(image, (starting point), (Ending point), (color), line thickness)
img = cv2.line(img, (0, 256), (512, 256), (255, 0, 0), 10)
現(xiàn)在,我們將在圖像的中心繪制兩個(gè)橢圓。要繪制橢圓,我們需要傳遞幾個(gè)參數(shù):
圖像文件
中心位置(x,y)
主要和短軸長(zhǎng)度
橢圓沿逆時(shí)針?lè)较虻男D(zhuǎn)角度
開(kāi)始和結(jié)束角度(起始和結(jié)束角度表示橢圓弧的起點(diǎn)和終點(diǎn)從長(zhǎng)軸順時(shí)針?lè)较?,即給出值0和360給出完整的橢圓)
橢圓的顏色
橢圓的厚度(-1表示它將填充形狀)
#cv2.ellipse(img, center, axes, angle, start angle, end angle, color, thickness=1)
img = cv2.ellipse(img,(256,256),(50,50),180,0,180,(255, 255, 0),-1)
img = cv2.ellipse(img,(256,256),(50,50),0,0,180,(0, 255, 0),-1)
接下來(lái),我們將在橢圓上繪制一個(gè)紅色圓圈。要畫(huà)一個(gè)圓,我們需要傳遞圖像文件,中心坐標(biāo),圓的半徑,(B,G,R)格式的顏色和圓的厚度。
#cv2.Circle(img, center, radius, color, thickness)
img = cv2.circle(img, (256, 256), 56, (0, 0, 255), 10)
之后,我們?cè)趫A圈上畫(huà)一個(gè)綠色矩形。要繪制矩形,您需要矩形的左上角和右下角。
#img = cv2.rectangle(image, (Top Left Corner), (Bottom Right Corner), (color), thickness)
img = cv2.rectangle(img, (189, 189), (323, 323), (0, 255, 0), 10)
要繪制多邊形,我們需要頂點(diǎn)的坐標(biāo)。將這些點(diǎn)組成一個(gè)形狀為ROWS x 1 x 2的數(shù)組,其中ROWS是頂點(diǎn)數(shù),它應(yīng)該是int32類型。
這里我們繪制一個(gè)帶有四個(gè)黃色頂點(diǎn)的小多邊形。
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
# cv2.PolyLine(img, polys, is_closed, color, thickness=1)
img = cv2.polylines(img,[pts],True,(0,255,255))
要將文本放入圖像中,我們需要提供想要寫(xiě)入的文本數(shù)據(jù),我們想要放置它的位置坐標(biāo)(即數(shù)據(jù)開(kāi)始的左下角),字體類型,字體比例(指定字體大?。伾?,粗細(xì)和線型。
#cv2.PutText(img, text, org, fontFace, fontScale, color, thickness, line type)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,‘OpenCV’,(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
用于檢測(cè)面部和在面上繪制圓形的Python代碼
現(xiàn)在我們將編寫(xiě)將檢測(cè)面部中的面部的代碼圖像并在臉部周圍繪制圓圈。為了檢測(cè)面部,我們將使用Haar級(jí)聯(lián)分類器。 OpenCV已經(jīng)包含許多面部,眼睛,微笑等預(yù)先訓(xùn)練的分類器。我們將要使用的分類器將檢測(cè)面部。您可以獲得級(jí)聯(lián)文件。
將此文件保存在工作目錄中作為“ haarcascade_frontalface_default.xml ”。
Python代碼如下:
# Import OpenCV library
import cv2
# Load a cascade file for detecting faces
faceCascade = cv2.CascadeClassifier(“haarcascade_frontalface_default.xml”);
# Load image
image = cv2.imread(‘obamafamily.jpg’)
# Convert into grayscale
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Look for faces in the image using the loaded cascade file
faces = faceCascade.detectMultiScale(gray, 1.2, 5)
for (x,y,w,h) in faces:
# Create circle around faces
cv2.circle(image, (int((x + x + w)/2), int((y + y + h)/2)), int(h/2), (0, 255, 0), 5)
# Create the resizeable window
cv2.namedWindow(‘Obama’, cv2.WINDOW_NORMAL)
# Display the image
cv2.imshow(‘Obama’, image)
# Wait until we get a key
k=cv2.waitKey(0)
# If pressed key is ‘s’
if k == ord(‘s’):
# Save the image
cv2.imwrite(‘convertedimage.jpg’, image)
# Destroy all windows
cv2.destroyAllWindows()
# If pressed key is ESC
elif k == 27:
# Destroy all windows
cv2.destroyAllWindows(
運(yùn)行代碼后,程序會(huì)在圖像中檢測(cè)到的區(qū)域創(chuàng)建圓圈。
-
OpenCV
+關(guān)注
關(guān)注
29文章
622瀏覽量
41091 -
樹(shù)莓派
+關(guān)注
關(guān)注
116文章
1679瀏覽量
105257
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論