RM新时代网站-首页

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

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

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

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

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

一、OpenCV介紹

OpenCV 是基于開(kāi)源許可證的跨平臺(tái)計(jì)算機(jī)視覺(jué)庫(kù),提供了一組豐富、廣泛的圖像處理和計(jì)算機(jī)視覺(jué)算法。OpenCV 支持多種編程語(yǔ)言,包括 C++、PythonJava 等,可以運(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)。

審核編輯 黃宇

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

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209322
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2966

    瀏覽量

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

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73618
  • OpenCV
    +關(guān)注

    關(guān)注

    31

    文章

    634

    瀏覽量

    41337
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4792

    瀏覽量

    84627
收藏 人收藏

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

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

    在使用浩辰機(jī)械CAD制圖軟件繪制圖紙的過(guò)程中,如何才能快速的對(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編程入門(mén)》書(shū)本配套源代碼:查找和繪制圖片輪廓矩
    發(fā)表于 06-06 15:20 ?3次下載

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

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

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

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

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

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