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