使用 OpenCV 在影像上繪製十字


OpenCV 是一個 Python 中的開源計算機視覺庫。它提供了許多函式來執行各種影像和影片處理操作。該庫使用 Numpy 模組將所有影片幀和影像表示為 ndarray 型別。它需要 numpy 庫,我們需要確保 numpy 模組也安裝在我們的 Python 直譯器中。

在本文中,我們將瞭解使用 OpenCV Python 在影像上繪製十字的不同方法。讓我們觀察輸入輸出場景以瞭解如何在影像上繪製十字。

輸入輸出場景

假設我們有一個輸入影像,在輸出中,我們將看到在…上繪製的十字

讓我們討論一下在影像上繪製十字的不同方法。

使用 cv2.drawMarker() 函式

該函式透過預定義的位置在影像上繪製標記。它支援多種標記型別。以下是此函式的語法 -

cv.drawMarker(img, position, color[, markerType[, markerSize[, thickness[, line_type]]]])

引數

  • img:要繪製標記的源影像。

  • position:十字準線所在的位置。

  • color:指定標記的顏色。

  • thickness:這是一個可選引數。它指定標記的線寬。

  • markerType:指定標記型別。可用的型別有

    • cv2.MARKER_CROSS:十字準線標記形狀。

    • cv2.MARKER_TILTED_CROSS:45 度傾斜的十字準線標記形狀。

    • cv2.MARKER_STAR:星形標記形狀,它是十字和傾斜十字的組合。

    • cv2.MARKER_DIAMOND:菱形標記形狀。

    • cv2.MARKER_SQUARE:正方形標記形狀。

    • cv2.MARKER_TRIANGLE_UP:向上指向的三角形標記形狀。

    • cv2.MARKER_TRIANGLE_DOWN:向下指向的三角形標記形狀。

  • thickness:指定線寬。

  • lineType(可選):它指定我們要使用的線型別。可用的 4 種 LineTypes 為

    • FILLED

    • LINE_4

    • LINE_8

    • LINE_AA

  • markerSize:它指定標記的長度,預設設定為 20 畫素

示例

在此示例中,我們將在輸入影像上繪製一個黑色十字。

import cv2
from random import randint

img = cv2.imread('Images/butterfly1.jpg')
cv2.imshow('Input image', img)

cv2.drawMarker(img, (250, 160), color=[0, 0, 0], thickness=10, 
   markerType= cv2.MARKER_TILTED_CROSS, line_type=cv2.LINE_AA,
   markerSize=100)
cv2.imshow('Output image', img)
cv2.waitKey(0)

輸入影像

輸出影像

使用 cv2.line() 函式

該函式在影像中連線點 pt1 和 pt2 之間繪製一條線。以下是 line() 函式的語法 -

cv.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]])

引數

  • img:要繪製標記的源影像。

  • pt1:影像中線條應開始位置的 x 和 y 座標的元組。

  • pt2:影像中線條應結束位置的 x 和 y 座標的元組。

  • color:指定標記的顏色。

  • thickness:這是一個可選引數。它指定標記的線寬。

  • lineType(可選):它指定我們要使用的線型別。可用的 4 種 LineTypes 為

    • FILLED

    • LINE_4

    • LINE_8

    • LINE_AA

  • shift:它指定點座標中的分數位數。

示例

讓我們獲取一個影像,並使用 cv2.line() 方法繪製一個十字。

import cv2
from random import randint

img = cv2.imread('Images/flower-black-background.jpg')
cv2.imshow('Input image', img)

coordinates = [[(420, 280), (520,280)], [(470, 220), (470,350)]]

cv2.line(img, coordinates[0][0],coordinates[0][1], color=[0, 0, 250], thickness=20)
cv2.line(img, coordinates[1][0],coordinates[1][1], color=[0, 0, 250], thickness=20)

cv2.imshow('Output image', img)
cv2.waitKey(0)

輸入影像

輸出影像

示例

在此示例中,我們將透過覆蓋影像的 4 個角來繪製十字線。最初,我們將使用 numpy 陣列(影像陣列)的 shape 屬性獲取影像的尺寸,並根據這些值,我們可以識別影像的角。

import cv2
from random import randint

img = cv2.imread('Images/Lenna.png')
cv2.imshow('Input image', img)

# image height = shape[0]
# image width = shape[1]
shape = img.shape

cv2.line(img, (0,0),shape[:2], color=[0, 0, 250], thickness=20)
cv2.line(img, (shape[1], 0), (0, shape[0]), color=[0, 0, 250], thickness=20)

cv2.imshow('Output image', img)
cv2.waitKey(0)

輸入影像

輸出影像

這就是 Python OpenCV 函式 cv2.lines() 和 drawMarker() 如何在特定影像上繪製十字的方式。

更新於:2023 年 5 月 30 日

2K+ 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.