一、OpenCV介紹
OpenCV 是基于開(kāi)源許可證的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),提供了一組豐富、廣泛的圖像處理和計(jì)算機(jī)視覺(jué)算法。OpenCV 支持多種編程語(yǔ)言,包括 C++、Python、Java 等,可以運(yùn)行在 Linux、Windows、Mac OS 等平臺(tái)上。
OpenCV 能夠在圖像上繪制各種幾何形狀、文本和曲線(xiàn),以及對(duì)圖像進(jìn)行調(diào)整、裁剪和旋轉(zhuǎn)等操作,這些功能都為圖像的分析和處理提供了很大的幫助。
以下是 OpenCV 可以繪制圖像的一些應(yīng)用:
(1)圖像標(biāo)注:在圖像上添加標(biāo)注或者注釋?zhuān)缭谀繕?biāo)檢測(cè)或者圖像分類(lèi)任務(wù)中,通過(guò)在圖像上繪制框、標(biāo)簽等信息來(lái)標(biāo)記檢測(cè)到的目標(biāo)。
(2)處理后顯示:例如在圖像處理過(guò)程中,可以在處理前和處理后的圖像上繪制對(duì)比圖,直觀(guān)地顯示圖像處理的效果。
(3)實(shí)時(shí)顯示:通過(guò)持續(xù)不斷地在屏幕上繪畫(huà)來(lái)實(shí)現(xiàn)實(shí)時(shí)顯示效果,例如在視頻處理中輸出處理后的視頻流并將其實(shí)時(shí)渲染在屏幕上。
二、繪制圖形
【1】繪制圖形彈窗顯示
下面代碼實(shí)現(xiàn)的功能:
使用 OpenCV(C++) 新建一張透明圖片,在圖片里繪制一個(gè)矩形、一條直線(xiàn)、一段文字、一個(gè)圓。
// 創(chuàng)建一張大小為 512x512,具有 alpha 通道的透明圖片
cv::Mat img(512, 512, CV_8UC4, cv::Scalar(0, 0, 0, 0));
?
// 在圖片上繪制一個(gè)矩形
cv::rectangle(img, cv::Point(50, 50), cv::Point(200, 150), cv::Scalar(255, 0, 0, 255), -1);
?
// 在圖片上繪制一條直線(xiàn)
cv::line(img, cv::Point(300, 100), cv::Point(450, 100), cv::Scalar(0, 255, 0, 255), 3);
?
// 在圖片上繪制一段文本
std::string text = "Hello, OpenCV!";
cv::putText(img, text, cv::Point(50, 300), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 0, 255, 255), 2);
?
// 在圖片上繪制一個(gè)圓
cv::circle(img, cv::Point(400, 350), 50, cv::Scalar(255, 255, 0, 255), -1);
?
// 顯示圖片
cv::imshow("image", img);
cv::waitKey(0);
cv::Mat 是 OpenCV 中表示圖像的數(shù)據(jù)結(jié)構(gòu),它可以存儲(chǔ)多通道的圖像。
cv::Scalar 是一個(gè)四通道的實(shí)數(shù)向量,用于表示像素點(diǎn)的顏色和 alpha 值。
cv::Point 是一個(gè)二維整型向量,用于表示像素點(diǎn)的坐標(biāo)。
cv::rectangle 函數(shù)用于在圖片上繪制矩形。
cv::line 函數(shù)用于在圖片上繪制直線(xiàn)。
cv::putText 函數(shù)用于在圖片上繪制文本。
cv::circle 函數(shù)用于在圖片上繪制圓。
【2】繪制圖形保存到本地
// 創(chuàng)建一張大小為 512x512,具有 alpha 通道的透明圖片
cv::Mat img(512, 512, CV_8UC4, cv::Scalar(0, 0, 0, 0));
?
// 在圖片上繪制一個(gè)矩形
cv::rectangle(img, cv::Point(50, 50), cv::Point(200, 150), cv::Scalar(255, 0, 0, 255), -1);
?
// 在圖片上繪制一條直線(xiàn)
cv::line(img, cv::Point(300, 100), cv::Point(450, 100), cv::Scalar(0, 255, 0, 255), 3);
?
// 在圖片上繪制一段文本
std::string text = "Hello, OpenCV!";
cv::putText(img, text, cv::Point(50, 300), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 0, 255, 255), 2);
?
// 在圖片上繪制一個(gè)圓
cv::circle(img, cv::Point(400, 350), 50, cv::Scalar(255, 255, 0, 255), -1);
?
// 保存圖片到本地
cv::imwrite("output.png", img);
三、函數(shù)功能介紹
【1】繪制直線(xiàn)
cv::line
函數(shù)用于在圖像上繪制一條直線(xiàn),其參數(shù)如下:
void cv::line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
int thickness = 1, LineTypes lineType = LINE_8, int shift = 0);
-
img
: 輸入輸出參數(shù),表示待繪制的目標(biāo)圖像。 -
pt1
: 輸入?yún)?shù),表示的是直線(xiàn)的起點(diǎn)坐標(biāo),是一個(gè)cv::Point
類(lèi)型的對(duì)象。 -
pt2
: 輸入?yún)?shù),表示的是直線(xiàn)的終點(diǎn)坐標(biāo),也是一個(gè)cv::Point
類(lèi)型的對(duì)象。 -
color
: 輸入?yún)?shù),表示繪制直線(xiàn)的顏色以及透明度,是一個(gè)cv::Scalar
類(lèi)型的對(duì)象。常見(jiàn)的顏色有:紅色(0, 0, 255)、綠色(0, 255, 0)、藍(lán)色(255, 0, 0)等。 -
thickness
: 可選參數(shù),表示繪制直線(xiàn)的寬度。默認(rèn)值為1
表示繪制一個(gè)像素寬度的直線(xiàn),如果設(shè)置為負(fù)值,則表示繪制一條填充直線(xiàn)。 -
lineType
: 可選參數(shù),表示直線(xiàn)的類(lèi)型,可以取以下幾個(gè)值:
cv::LINE_4
: 表示繪制一條 4 連通的直線(xiàn),默認(rèn)值。cv::LINE_8
: 表示繪制一條 8 連通的直線(xiàn)。cv::LINE_AA
: 表示繪制一條抗鋸齒的直線(xiàn)。
-
shift
: 可選參數(shù),表示坐標(biāo)點(diǎn)像素值所占用的位數(shù),默認(rèn)為 0。
【2】繪制圓
cv::circle
函數(shù)用于在圖像上繪制一個(gè)圓,其參數(shù)如下:
void cv::circle(InputOutputArray img, Point center, int radius, const Scalar& color,
int thickness = 1, LineTypes lineType = LINE_8, int shift = 0);
-
img
: 輸入輸出參數(shù),表示待繪制的目標(biāo)圖像。 -
center
: 輸入?yún)?shù),表示圓心坐標(biāo),是一個(gè)cv::Point
類(lèi)型的對(duì)象。 -
radius
: 輸入?yún)?shù),表示圓的半徑。 -
color
: 輸入?yún)?shù),表示繪制圓的顏色以及透明度,是一個(gè)cv::Scalar
類(lèi)型的對(duì)象。 -
thickness
: 可選參數(shù),表示圓線(xiàn)條的寬度。默認(rèn)值為1
表示繪制一個(gè)像素寬度的圓,如果設(shè)置為負(fù)值,則表示繪制一條填充的圓。 -
lineType
: 可選參數(shù),表示圓邊界的類(lèi)型,可以取以下幾個(gè)值:
cv::LINE_4
: 表示繪制四個(gè)相鄰的點(diǎn)的圓邊界,默認(rèn)值。cv::LINE_8
: 表示繪制八個(gè)相鄰的點(diǎn)的圓邊界。cv::LINE_AA
: 表示繪制抗鋸齒的圓邊界。
-
shift
: 可選參數(shù),表示坐標(biāo)點(diǎn)像素值所占用的位數(shù),默認(rèn)值為 0。
【3】繪制矩形
cv::rectangle
函數(shù)用于在圖像上繪制一個(gè)矩形,其參數(shù)如下:
void cv::rectangle(InputOutputArray img, Rect rect, const Scalar& color,
int thickness = 1, LineTypes lineType = LINE_8, int shift = 0);
-
img
: 輸入輸出參數(shù),表示待繪制的目標(biāo)圖像。 -
rect
: 輸入?yún)?shù),表示矩形,是一個(gè)cv::Rect
類(lèi)型的對(duì)象,可以通過(guò)傳遞左上角和右下角坐標(biāo)的方式來(lái)定義一個(gè)矩形。 -
color
: 輸入?yún)?shù),表示繪制矩形的顏色以及透明度,是一個(gè)cv::Scalar
類(lèi)型的對(duì)象。 -
thickness
: 可選參數(shù),表示矩形邊框的寬度。默認(rèn)值為1
表示繪制一個(gè)像素寬度的矩形,如果設(shè)置為負(fù)值,則表示繪制一條填充的矩形。 -
lineType
: 可選參數(shù),表示矩形邊框的類(lèi)型,可以取以下幾個(gè)值:
cv::LINE_4
: 表示繪制四個(gè)相鄰的點(diǎn)的矩形邊框,默認(rèn)值。cv::LINE_8
: 表示繪制八個(gè)相鄰的點(diǎn)的矩形邊框。cv::LINE_AA
: 表示繪制抗鋸齒的矩形邊框。
-
shift
: 可選參數(shù),表示坐標(biāo)點(diǎn)像素值所占用的位數(shù),默認(rèn)值為 0。
【4】繪制文本
cv::putText
函數(shù)用于在圖像上繪制文本,其參數(shù)如下:
void cv::putText(InputOutputArray img, const String& text, Point org, int fontFace,
double fontScale, Scalar color, int thickness = 1, int lineType = LINE_8,
bool bottomLeftOrigin = false);
-
img
: 輸入輸出參數(shù),表示待繪制的目標(biāo)圖像。 -
text
: 輸入?yún)?shù),表示要繪制的文本字符串。 -
org
: 輸入?yún)?shù),表示文本框左下角的坐標(biāo)點(diǎn),是一個(gè)cv::Point
類(lèi)型的對(duì)象。 -
fontFace
: 輸入?yún)?shù),表示字體類(lèi)型,可以取以下幾個(gè)值:
cv::FONT_HERSHEY_COMPLEX
: 復(fù)雜風(fēng)格字體。cv::FONT_HERSHEY_COMPLEX_SMALL
: 小字號(hào)復(fù)雜風(fēng)格字體。cv::FONT_HERSHEY_DUPLEX
: 雙線(xiàn)條字體。cv::FONT_HERSHEY_PLAIN
: 單線(xiàn)條字體。cv::FONT_HERSHEY_SIMPLEX
: 正常大小的字體。cv::FONT_HERSHEY_TRIPLEX
: 三線(xiàn)條字體。
-
fontScale
: 輸入?yún)?shù),表示字體大小縮放比例。 -
color
: 輸入?yún)?shù),表示繪制文本的顏色以及透明度,是一個(gè)cv::Scalar
類(lèi)型的對(duì)象。 -
thickness
: 可選參數(shù),表示文本輪廓線(xiàn)條的寬度。默認(rèn)值為1
表示繪制一個(gè)像素寬度的文本,如果設(shè)置為負(fù)值,則表示繪制一條填充的文本。 -
lineType
: 可選參數(shù),表示文本邊界的類(lèi)型,可以取以下幾個(gè)值:
cv::LINE_4
: 表示繪制四個(gè)相鄰的點(diǎn)的文本邊界,默認(rèn)值。cv::LINE_8
: 表示繪制八個(gè)相鄰的點(diǎn)的文本邊界。cv::LINE_AA
: 表示繪制抗鋸齒的文本邊界。
-
bottomLeftOrigin
: 可選參數(shù),表示坐標(biāo)點(diǎn)是否為文本框左下角的坐標(biāo)點(diǎn),默認(rèn)值為false
,表示坐標(biāo)點(diǎn)為文本框左上角的坐標(biāo)點(diǎn)。
審核編輯 黃宇
-
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209322 -
JAVA
+關(guān)注
關(guān)注
19文章
2966瀏覽量
104700 -
C++
+關(guān)注
關(guān)注
22文章
2108瀏覽量
73618 -
OpenCV
+關(guān)注
關(guān)注
31文章
634瀏覽量
41337 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84627
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論