0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenCV(C++)創(chuàng)建圖片繪制圖形(矩形、圓、文字、線段等等)

DS小龍哥-嵌入式技術(shù) ? 來(lái)源: DS小龍哥-嵌入式技術(shù) ? 作者: DS小龍哥-嵌入式技 ? 2023-06-07 09:19 ? 次閱讀

一、OpenCV介紹

OpenCV 是基于開源許可證的跨平臺(tái)計(jì)算機(jī)視覺庫(kù),提供了一組豐富、廣泛的圖像處理和計(jì)算機(jī)視覺算法。OpenCV 支持多種編程語(yǔ)言,包括 C++Python、Java 等,可以運(yùn)行在 Linux、Windows、Mac OS 等平臺(tái)上。

OpenCV 能夠在圖像上繪制各種幾何形狀、文本和曲線,以及對(duì)圖像進(jìn)行調(diào)整、裁剪和旋轉(zhuǎn)等操作,這些功能都為圖像的分析和處理提供了很大的幫助。

以下是 OpenCV 可以繪制圖像的一些應(yīng)用:

(1)圖像標(biāo)注:在圖像上添加標(biāo)注或者注釋,例如在目標(biāo)檢測(cè)或者圖像分類任務(wù)中,通過在圖像上繪制框、標(biāo)簽信息來(lái)標(biāo)記檢測(cè)到的目標(biāo)。

(2)處理后顯示:例如在圖像處理過程中,可以在處理前和處理后的圖像上繪制對(duì)比圖,直觀地顯示圖像處理的效果。

(3)實(shí)時(shí)顯示:通過持續(xù)不斷地在屏幕上繪畫來(lái)實(shí)現(xiàn)實(shí)時(shí)顯示效果,例如在視頻處理中輸出處理后的視頻流并將其實(shí)時(shí)渲染在屏幕上。

二、繪制圖形

【1】繪制圖形彈窗顯示

下面代碼實(shí)現(xiàn)的功能:

使用 OpenCV(C++) 新建一張透明圖片,在圖片里繪制一個(gè)矩形、一條直線、一段文字、一個(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);
 ?
 // 在圖片上繪制一條直線
 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ù)用于在圖片上繪制直線。

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);
 ?
 // 在圖片上繪制一條直線
 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】繪制直線

cv::line 函數(shù)用于在圖像上繪制一條直線,其參數(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ù),表示的是直線的起點(diǎn)坐標(biāo),是一個(gè) cv::Point 類型的對(duì)象。

  • pt2: 輸入?yún)?shù),表示的是直線的終點(diǎn)坐標(biāo),也是一個(gè) cv::Point 類型的對(duì)象。

  • color: 輸入?yún)?shù),表示繪制直線的顏色以及透明度,是一個(gè) cv::Scalar 類型的對(duì)象。常見的顏色有:紅色(0, 0, 255)、綠色(0, 255, 0)、藍(lán)色(255, 0, 0)等。

  • thickness: 可選參數(shù),表示繪制直線的寬度。默認(rèn)值為 1 表示繪制一個(gè)像素寬度的直線,如果設(shè)置為負(fù)值,則表示繪制一條填充直線。

  • lineType
    

    : 可選參數(shù),表示直線的類型,可以取以下幾個(gè)值:

    • cv::LINE_4: 表示繪制一條 4 連通的直線,默認(rèn)值。
    • cv::LINE_8: 表示繪制一條 8 連通的直線。
    • cv::LINE_AA: 表示繪制一條抗鋸齒的直線。
  • 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 類型的對(duì)象。

  • radius: 輸入?yún)?shù),表示圓的半徑。

  • color: 輸入?yún)?shù),表示繪制圓的顏色以及透明度,是一個(gè) cv::Scalar 類型的對(duì)象。

  • thickness: 可選參數(shù),表示圓線條的寬度。默認(rèn)值為 1 表示繪制一個(gè)像素寬度的圓,如果設(shè)置為負(fù)值,則表示繪制一條填充的圓。

  • lineType
    

    : 可選參數(shù),表示圓邊界的類型,可以取以下幾個(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 類型的對(duì)象,可以通過傳遞左上角和右下角坐標(biāo)的方式來(lái)定義一個(gè)矩形。

  • color: 輸入?yún)?shù),表示繪制矩形的顏色以及透明度,是一個(gè) cv::Scalar 類型的對(duì)象。

  • thickness: 可選參數(shù),表示矩形邊框的寬度。默認(rèn)值為 1 表示繪制一個(gè)像素寬度的矩形,如果設(shè)置為負(fù)值,則表示繪制一條填充的矩形。

  • lineType
    

    : 可選參數(shù),表示矩形邊框的類型,可以取以下幾個(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 類型的對(duì)象。

  • fontFace
    

    : 輸入?yún)?shù),表示字體類型,可以取以下幾個(gè)值:

    • cv::FONT_HERSHEY_COMPLEX: 復(fù)雜風(fēng)格字體。
    • cv::FONT_HERSHEY_COMPLEX_SMALL: 小字號(hào)復(fù)雜風(fēng)格字體。
    • cv::FONT_HERSHEY_DUPLEX: 雙線條字體。
    • cv::FONT_HERSHEY_PLAIN: 單線條字體。
    • cv::FONT_HERSHEY_SIMPLEX: 正常大小的字體。
    • cv::FONT_HERSHEY_TRIPLEX: 三線條字體。
  • fontScale: 輸入?yún)?shù),表示字體大小縮放比例。

  • color: 輸入?yún)?shù),表示繪制文本的顏色以及透明度,是一個(gè) cv::Scalar 類型的對(duì)象。

  • thickness: 可選參數(shù),表示文本輪廓線條的寬度。默認(rèn)值為 1 表示繪制一個(gè)像素寬度的文本,如果設(shè)置為負(fù)值,則表示繪制一條填充的文本。

  • lineType
    

    : 可選參數(shù),表示文本邊界的類型,可以取以下幾個(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)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209499
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2967

    瀏覽量

    104751
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73651
  • OpenCV
    +關(guān)注

    關(guān)注

    31

    文章

    635

    瀏覽量

    41350
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84689
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    推薦幾個(gè)去掉圖片上的文字的技巧!!

     推薦幾個(gè)去掉圖片上的文字的技巧!!1、使用仿制圖章工具去除文字。 這是比較常用的方法。具體的操作是,選取仿制圖章工具,按住 Al
    發(fā)表于 06-02 18:08

    VC繪制圖形的示例(含源代碼)

    VC繪制圖形的示例(含源代碼) [hide][/hide]
    發(fā)表于 05-10 10:13

    【安富萊】【STemWin教程】第10章 2-D圖形庫(kù)之繪制圖形

    `第10章 2-D圖形庫(kù)之繪制圖形 本期主要講解2-D圖形庫(kù)的圖形繪制,包括繪制多邊形,
    發(fā)表于 03-25 11:21

    第10章 2-D圖形庫(kù)之繪制圖形

    轉(zhuǎn)stemwin教程本期主要講解2-D圖形庫(kù)的圖形繪制,包括繪制多邊形,繪制
    發(fā)表于 10-12 10:13

    國(guó)產(chǎn)CAD制圖軟件中閉合命令的使用技巧

    在使用浩辰CAD制圖軟件繪制圖紙的過程中,如果存在不閉合的圖形,有些操作就會(huì)無(wú)法進(jìn)行,比如在填充時(shí)候則需要填充區(qū)域是封閉的。那么怎么才能將圖形閉合呢?接下來(lái)和小編一起來(lái)看看國(guó)產(chǎn)CAD浩
    發(fā)表于 08-11 15:10

    機(jī)械CAD制圖軟件入門教程:繪制倒角/

    在使用浩辰機(jī)械CAD制圖軟件繪制圖紙的過程中,如何才能快速的對(duì)一些倒角/倒進(jìn)行處理呢?下面就和小編一起來(lái)看看浩辰機(jī)械CAD制圖軟件中快速繪制
    發(fā)表于 10-13 14:51

    C語(yǔ)言繪制圖像梯度圖原理介紹

    *2401、采集原始圖像配置ESP32輸出灰度圖,像素太高無(wú)法存儲(chǔ)及處理。320*240= 75K。2、圖像梯度計(jì)算參考代碼:C語(yǔ)言繪制圖像梯度圖 原理介紹:圖像的梯度 h...
    發(fā)表于 01-11 06:36

    如何將單片機(jī)攝像頭讀取回傳的RGB數(shù)組繪制圖片

    咚咚咚的關(guān)于使用Matlab————將單片機(jī)攝像頭讀取回傳的RGB數(shù)組繪制圖片(一)效果展示(二)源碼分享(三)需要改進(jìn)的地方及不足(一)效果展示(二)源碼分享(Excel部分函數(shù))=HEX2BIN
    發(fā)表于 01-20 07:13

    如何使用emWin的API繪制圖形

    應(yīng)用程序: 此示例代碼使用 emWin 的 API 繪制圖形, 可以用作按鈕, 更改面板上文字編輯的值 。 BSP 版本:M480系列BSP CMSIS V3.03.001 硬件
    發(fā)表于 08-23 07:37

    M480使用emWin的API繪制圖形

    應(yīng)用程序: 此示例代碼使用 emWin 的 API 繪制圖形, 可以用作按鈕, 更改面板上文字編輯的值 。 BSP 版本:M480系列BSP CMSIS V3.03.001 硬件
    發(fā)表于 08-30 08:58

    C#教程之圖片繪制文字

    C#教程之圖片繪制文字,很好的C#資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-20 11:13 ?5次下載

    查找和繪制圖片輪廓矩

    OpenCV3編程入門》書本配套源代碼:查找和繪制圖片輪廓矩
    發(fā)表于 06-06 15:20 ?3次下載

    OpenCV3編程入門-源碼例程全集-查找和繪制圖片輪廓矩

    OpenCV3編程入門-源碼例程全集-查找和繪制圖片輪廓矩
    發(fā)表于 09-17 22:54 ?2次下載

    手動(dòng)版實(shí)現(xiàn)帶箭頭的線段繪制

    我根據(jù)一個(gè)矩形進(jìn)行了各種角度旋轉(zhuǎn),就想通過繪制一個(gè)帶方向的線段表示它,通過旋轉(zhuǎn)矩陣很容易的獲取了兩個(gè)點(diǎn)坐標(biāo),但是很快遇到了一個(gè)新問題,怎么繪制那個(gè)箭頭,就是帶箭頭的
    的頭像 發(fā)表于 05-17 11:24 ?1726次閱讀

    鴻蒙開發(fā)接口圖形圖像:【W(wǎng)ebGL】

    WebGL提供圖形繪制的能力,包括對(duì)當(dāng)前繪制圖形的位置、顏色等進(jìn)行處理。
    的頭像 發(fā)表于 05-30 09:31 ?524次閱讀
    鴻蒙開發(fā)接口<b class='flag-5'>圖形</b>圖像:【W(wǎng)ebGL】