溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python?OpenCV中如何進行圖形繪制

發(fā)布時間:2022-01-06 14:33:45 來源:億速云 閱讀:151 作者:柒染 欄目:開發(fā)技術

這篇文章將為大家詳細講解有關Python OpenCV中如何進行圖形繪制,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

背景

使用OpenCV進行圖形繪制是一種必備的技能,在圖像的任務中,不管是圖像檢測還是圖像識別,我們都需要通過繪制圖形和繪制文字對處理的結果進行說明,本篇就詳細介紹下圖形的繪制;

一、畫線

line(圖像,起始點,終點,顏色,線寬,線形):一般只需要前面四個參數(shù)即可;

代碼案例:

cv2.line(img, (20, 100), (20, 500), (0,0,255))

畫出了一條Y方向上的紅色線段;

二、畫矩形

這個相對來說是應用最多的一種方法了,往往在檢測項目中返回目標的結果就是(x,y,w,h)或者(x1,y1,x2,y2)這兩種形式,當然我們這里繪制需要的是第二種形式,而通過左上角點計算右下角也是很簡單的;

cv2.rectangle(img, (x1,y1), (x2,y2), (0,0,255), 3)    # 后面兩個參數(shù)為顏色和線長

簡單展示一下我用DeepFashion數(shù)據(jù)畫出矩形框的效果:

Python?OpenCV中如何進行圖形繪制

三、畫圓

畫圓在應用的其實并不多,更多的是畫點的操作,例如關鍵點的任務,需要將關鍵點在目標圖像上顯示出來;而實際上點就是一個實心圓,這里就介紹畫圓和畫點的兩種形式吧。

# 函數(shù)
cv2.circle(img, (x,y), 半徑長度, (0,0,255), -1)        // 畫一個實心圓(點),最后參數(shù)設置為負數(shù)
cv2.circle(img, (x,y), 半徑長度, (0,0,255), 4)        // 畫一個空心圓

下面還是展示我畫出關鍵點的一個效果:

Python?OpenCV中如何進行圖形繪制

四、畫多邊形

繪制多邊形在實際應用中也很常見,例如分割以及OCR的任務,往往需要用多個點描述出目標的輪廓。

函數(shù)原型如下:

polylines(img,點集,是否閉環(huán),顏色…),注意這里的點集必須是32位的

案例代碼:

pot = np.array([(100, 100), (200, 200), (300, 400)], np.int32)
cv2.polylines(img, [pot], True, (0, 0, 255))
# 如果輸出填充的多邊形,用以下api
cv2.fillPoly(img, [pot], (0, 0, 255))

五、畫文本

繪制文本在實際項目中,往往用來標記類別,對于一些結果輸出,可以通過文本的方式繪制到圖像上,便于觀察結果和驗證;

函數(shù)原型:

putText(img,字符串,起始點,字體,字號…)

案例代碼:

cv2.putText(img, "Hello World", (100, 100), 字體, 3, (0,0,255))

六、鼠標繪制

實現(xiàn)功能:

可通過鼠標進行基本圖形的繪制:按下l畫線,按下r畫矩形,按下c畫圓;

import cv2
import numpy as np

star = (0, 0)
select = 0
img = np.zeros((480, 640, 3), np.uint8)

// 定義鼠標回調(diào)函數(shù)
def mouse_callback(event, x, y, flags, userdata):
    global star,select
    if (event & cv2.EVENT_LBUTTONDOWN == cv2.EVENT_LBUTTONDOWN):
        star = (x, y)
    elif (event & cv2.EVENT_LBUTTONUP == cv2.EVENT_LBUTTONUP):
        if select == 0:
            cv2.line(img, star, (x, y), (0, 0, 255))
        elif select == 1:
            cv2.rectangle(img, star, (x, y), (0, 0, 255))
        elif select == 2:
            a = (x - star[0])
            b = (y - star[1])
            r = int((a**2+b**2)**0.5)
            cv2.circle(img, star, r, (0, 0, 255))
        else:
            print('no shape')
            
cv2.namedWindow('drawshape', cv2.WINDOW_NORMAL)
cv2.setMouseCallback('drawshape', mouse_callback, "111")
while True:
    cv2.imshow('drawshape', img)
    key=cv2.waitKey(1) & 0xFF
    if key == ord('q'):
        break
    elif key == ord('l'):
        select = 0
    elif key == ord('r'):
        select = 1
    elif key == ord('c'):
        select = 2

下圖是我自己隨意畫的結果,大家可以創(chuàng)造出更有趣的圖畫;

Python?OpenCV中如何進行圖形繪制

關于Python OpenCV中如何進行圖形繪制就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI