OpenCV-Python教程:繪制直線、圓形、方形(line,circle,rectangle)


原文鏈接:http://www.juzicode.com/archives/5323

返回Opencv-Python教程

因為繪圖操作需要用到起點、終點坐標等參數,繪圖前需要先了解在OpenCV中圖像像素位置的坐標表示方法。一般我們用的直角坐標系x軸向右增長,y軸向上增長,但是在OpenCV圖像中,y卻是向下增長的,也就說一張圖片左上角頂點的坐標為(0,0),這樣的處理也符合人類從左到右、從上到下的閱讀習慣。

另外有點和常識不同的地方是我們常說“R-G-B”三原色,一個像素可以用R、G、B三種像素組合成各種不同的顏色,但是在OpenCV彩色圖像中一個像素卻是按照“B-G-R”模式組織的。

繪圖操作函數的一些公共參數:

  • img:圖像對象。
  • color:顏色,如果是彩色用一個三元組表示,三元組的元素按照B-G-R組織,三元組(0,255,0)中B,R為0,G為255,所以表示的是純綠色。如果是灰度,則用單個數值表示
  • thickness:線條寬度。
  • point:點位置,用一個二元組表示,二元組元素按照x-y組織,比如(10,20)表示的是從左到右x=10,從上到下y=20的位置。
  • lineType : 線條類型,在繪制曲線時通常使用CV2.LINE_AA可以有更好的平滑效果。

 

1、直線

 在一個坐標系中知道兩個點,兩點之間的連線就構成了一條直線,所以畫直線需要起點和終點的x-y坐標。

繪圖方法用cv2.line(),

  • 第1個位置參數為要繪圖的圖像實例。
  • 第2個參數為起點,二元組。
  • 第3個參數為終點,二元組。
  • 第4個參數為顏色。
  • 第5個參數為線寬。

先用numpy構建一個512×512大小的純白色圖片對象:img = np.ones((512,512,3)),起點選在start=(50,50),終點選擇stop=(300,300),顏色設置為紅色color=(0,0,255),線寬thick=5:

import cv2
import numpy as np
print('VX公眾號: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)
img = np.ones((512,512,3))
start=(50,50)
stop=(300,300)
color=(0,0,255)
thick=5
cv2.line(img,start,stop,color,thick)
cv2.imshow('img',img)
cv2.waitKey()

運行結果:

 如果使用灰度圖,img構建成單通道圖像,color雖然可以用三元組表示,但是實際只用到了第0個元素。在白色背景下,用0值表示黑色,黑色背景下大於0的值表示白色:

import cv2
import numpy as np
print('VX公眾號: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)
img = np.ones((512,512)) #白色背景
start=(50,50)
stop=(300,300)
color=(0,255,255) #白色背景下顯示黑色線條,雖然可以用三元組表示顏色,實際只取第0個元素
thick=5
cv2.line(img,start,stop,color,thick)
cv2.imshow('img-white',img)

img = np.zeros((512,512)) #黑色背景
start=(50,50)
stop=(300,300)
color=1 #黑色背景下顯示白色線條,大於0即可
thick=5
cv2.line(img,start,stop,color,thick)
cv2.imshow('img-black',img)
cv2.waitKey()

運行結果:

 

 

2、圓形

 使用cv2.circle()畫圓

  • 第1參數是圖像對象;
  • 第2個參數為圓心;
  • 第3個參數為半徑;
  • 第4個參數為顏色;
  • 第5個參數為線條寬度,如果使用-1會自動填充圓形的內部;

下面這個例子中在圓心(100,100)處畫一個黃色外框半徑為50的空心圓,在圓心(200,200)處畫一個半徑為50的實心圓。

import cv2
import numpy as np
print('VX公眾號: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)
img = np.ones((512,512,3)) #白色背景
center=(100,100)
radius=50
color=(0,255,255)  #黃色
cv2.circle(img,center, radius, color, 5) #線條

center=(200,200)
cv2.circle(img,center, radius, color, -1) #填充
cv2.imshow('img',img)
 
cv2.waitKey()

運行結果:

 

 

3、方形

 cv2.rectangle()用來畫方形,包括長方形和正方形。

  • 第1個參數為圖像對象;
  • 第2個參數為方形左上角坐標;
  • 第3個參數為方形右下角坐標,方形的寬高自動根據起始點坐標計算;
  • 第4個參數為顏色;
  • 第5個參數為線條寬度,如果使用-1會自動填充圓形的內部;

下面的例子畫出2個方形:

import cv2
import numpy as np
print('VX公眾號: 桔子code / juzicode.com')
print('cv2.__version__:',cv2.__version__)
img = np.ones((512,512,3)) #白色背景

topleft=(10,100)
downright=(111,333)
color=(255,0,0)  #藍色
cv2.rectangle(img,topleft, downright, color, 2) #線條

topleft=(300,100)
downright=(500,300)
color=(0,255,0)  #藍色
cv2.rectangle(img,topleft, downright, color, -1) #填充

cv2.imshow('juzicode',img)
 
cv2.waitKey()

運行結果:

 

小結:本文介紹了如何在OpenCV圖像中繪制直線、圓形、方形,用的比較多的是繪制方形,比如人臉識別時將人臉部分用方框標注出來

 

擴展閱讀:

  1. OpenCV-Python教程
  2. OpenCV-Python教程:OpenCV-Python教程:繪制多邊形、輸出文字


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM