Python代碼繪制幾何形狀
下面的代碼將在黑色圖像上繪制線條,橢圓,圓形,矩形,折線和文字。復制此代碼并執行它。我們將詳細介紹代碼如何在下面工作。
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()
運行代碼將打開此輸出:
代碼細分
首先,我們導入所需的軟件包。 OpenCV包幫助我們繪制不同的幾何形狀,NumPy包允許我們創建一個空白圖像并進行其他數學運算。
import cv2
import numpy as np
接下來,我們創建一個黑色圖像,我們可以在其上繪制幾何圖形形狀。
img = np.zeros((512, 512, 3), np.uint8)
然后我們使用 cv2.line() 函數繪制一條厚度為5像素的藍色對角線。我們將在中心左側到中間右側的黑色圖像上畫一條藍線。
cv2.line() 函數有五個參數:
圖像文件
起點(圖像線上將開始的位置)
結束點
顏色的行
行的粗細
#img = cv2.line(image, (starting point), (Ending point), (color), line thickness)
img = cv2.line(img, (0, 256), (512, 256), (255, 0, 0), 10)
現在,我們將在圖像的中心繪制兩個橢圓。要繪制橢圓,我們需要傳遞幾個參數:
圖像文件
中心位置(x,y)
主要和短軸長度
橢圓沿逆時針方向的旋轉角度
開始和結束角度(起始和結束角度表示橢圓弧的起點和終點從長軸順時針方向,即給出值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)
接下來,我們將在橢圓上繪制一個紅色圓圈。要畫一個圓,我們需要傳遞圖像文件,中心坐標,圓的半徑,(B,G,R)格式的顏色和圓的厚度。
#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)
要繪制多邊形,我們需要頂點的坐標。將這些點組成一個形狀為ROWS x 1 x 2的數組,其中ROWS是頂點數,它應該是int32類型。
這里我們繪制一個帶有四個黃色頂點的小多邊形。
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))
要將文本放入圖像中,我們需要提供想要寫入的文本數據,我們想要放置它的位置坐標(即數據開始的左下角),字體類型,字體比例(指定字體大小),顏色,粗細和線型。
#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)
用于檢測面部和在面上繪制圓形的Python代碼
現在我們將編寫將檢測面部中的面部的代碼圖像并在臉部周圍繪制圓圈。為了檢測面部,我們將使用Haar級聯分類器。 OpenCV已經包含許多面部,眼睛,微笑等預先訓練的分類器。我們將要使用的分類器將檢測面部。您可以獲得級聯文件。
將此文件保存在工作目錄中作為“ 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(
運行代碼后,程序會在圖像中檢測到的區域創建圓圈。
-
OpenCV
+關注
關注
32文章
642瀏覽量
42540 -
樹莓派
+關注
關注
121文章
1963瀏覽量
107081
發布評論請先 登錄
itop-3568開發板機器視覺opencv開發手冊-圖像繪制-畫線
樹莓派“定居”完全指南:一鍵設置靜態IP,穩定又高效!

基于LockAI視覺識別模塊:C++輪廓檢測
從初學到進階:樹莓派上最適合你的代碼編輯器推薦!

在樹莓派上設置 DeepSeek R1:2025 年離線人工智能的未來

不要等Manus的邀請碼了,樹莓派上也能實現 AI Agent !

評論