利用opencv-python繪制多邊形框或(半透明)區域填充(可用于分割任務mask可視化)

利用opencv-python繪制多邊形框或(半透明)區域填充(可用于分割任務mask可視化)

本文主要就少opencv中兩個函數polylines和fillPoly分別用于繪制多邊形框或區域填充,并會會以常見用途分割任務mask(還是筆者的豬仔數據集^^)可視化舉例示范。

cv2.polylines()

以下是摘自Ref的函數介紹,筆者將在下面結合例子解釋其中的參數。

cv2.polylines() method is used to draw a polygon on any image.

Syntax: cv2.polylines(image, [pts], isClosed, color, thickness)>

Parameters:
image: It is the image on which circle is to be drawn.
pts: Array of polygonal curves.
npts: Array of polygon vertex counters.
ncontours: Number of curves.
isClosed: Flag indicating whether the drawn polylines are closed or not. If they are closed, the function draws a line from the last vertex of each curve to its first
vertex.
color: It is the color of polyline to be drawn. For BGR, we pass a tuple.
thickness: It is thickness of the polyline edges.

Return Value: It returns an image.

說幾個關鍵的參數:第一個參數image自然就是要標記多邊形框的原圖,pts是多邊形框的各個坐標點(這里整個pts參數要注意多加一個中括號,一會兒會結合例子說一下),isClosed的參數是是否要將多邊形閉合,即最后一個坐標點是否要再連回到第一個坐標點,一會兒會實驗給大家看一下差別,color是多邊形框的顏色,大家選用自己喜歡的顏色就好,這里都采用筆者的生日 (98,9,11)。

我們先講豬仔數據集中的一張圖片及其標簽讀入:

import json
import cv2
import numpy as npwith open('labels/mask2bbox_labels_200/20190515142143.json', 'r') as obj:dict = json.load(obj)
img = cv2.imread('images/train_img/20190515142143.jpg')

原圖是這樣滴:

在這里插入圖片描述

我們的目標就是根據人工mask標注將小豬仔們用多邊形框(不是box矩形框)圈出來,或者用半透明的mask區域表示出來。

開始用一個for循環將所有多邊形框讀出并畫出:

for label in dict['shape']:points = np.array(label['points'], dtype=np.int32)cv2.polylines(img, [points], True, (98, 9, 11), 3)cv2.imshow('rect', img)
cv2.waitKey(0)
cv2.imwrite('rect.jpg', img)

可以看到是我們想要的效果,小豬仔都被人工標注的坐標形成的多邊形圈了起來。

在這里插入圖片描述

這里要注意我們的pts參數要在外面多加一個中括號,筆者一開始也忽視了這個地方:

cv2.polylines(img, points, False, (98, 9, 11), 3)

會導致報錯:

cv2.error: OpenCV(4.4.0) /tmp/pip-req-build-99ib2vsi/opencv/modules/imgproc/src/drawing.cpp:2427: error: (-215:Assertion failed) p.checkVector(2, CV_32S) >= 0 in function 'polylines'

我們一般拿到的某個多邊形框的坐標點的形狀是[n, 2],n是某一多邊形框的點的個數,2是每個點的x,y坐標。但這里其實是要pts參數的形狀為[1, n, 2],當然也可以用expand_dims將形狀調整過來,但這屬于舍近求遠了。筆者一開始就以為不明晰這其中的狀況繞了遠路,所以在這里提醒一下大家。

總之把我們的形狀為[n, 2]坐標點作為參數在傳入函數時加個中括號[pts]即可。

如果isClosed=False參數會怎樣呢:

for label in dict['shape']:points = np.array(label['points'], dtype=np.int32)cv2.polylines(img, [points], False, (98, 9, 11), 3)

結果:

在這里插入圖片描述

可以看到確實每個多邊形框都少了一段,即是沒有閉合的結果,所以我們一般將isClosed設為True。

cv2.fillPoly()

for label in dict['shape']:points = np.array(label['points'], dtype=np.int32)cv2.fillPoly(img, [points], color=(98, 9, 11))

參數與polylines()類似,就不再贅述了,直接這樣做得到的結果:

在這里插入圖片描述

確實能將mask標注內的區域都做填充,但這顯然不是我們要的效果,我們需要的是半透明的mask。

我們只要將mask先放到zero圖上,再將mask和原圖加和起來就OK了。

zeros = np.zeros((img.shape), dtype=np.uint8)
for label in dict['shape']:points = np.array(label['points'], dtype=np.int32)mask = cv2.fillPoly(zeros, [points], color=(98, 9, 11))mask_img = 0.9 * mask + img

結果:

在這里插入圖片描述

這才是我們最終想要的mask可視化結果。

讀者如有疑惑或異議,歡迎留言討論。

Ref:
https://www.geeksforgeeks.org/
https://blog.csdn.net/weixin_41735859/article/details/103758249

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532847.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532847.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532847.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

matlab與maple互聯,Matlab,Maple和Mathematica三款主流科學計算軟件的互操作

本文根據網上零散的信息以及這三款軟件自帶的說明文檔整理而成,為備忘而記錄。記錄了Matlab和Maple之間的相互調用,以及Matlab和Mathematica之間相互調用的安裝配置方法。為何需要互操作? 數值計算和圖形方面Matlab毫無疑問是最強的&a…

PyTorch中的topk方法以及分類Top-K準確率的實現

PyTorch中的topk方法以及分類Top-K準確率的實現 Top-K 準確率 在分類任務中的類別數很多時(如ImageNet中1000類),通常任務是比較困難的,有時模型雖然不能準確地將ground truth作為最高概率預測出來,但通過學習&#…

java高級語言特性,Java高級語言特性之注解

注解的定義Java 注解(Annotation)又稱 Java 標注,是 JDK1.5 引入的一種注釋機制。注解是元數據的一種形式,提供有關于程序但不屬于程序本身的數據。注解對它們注解的代碼的操作沒有直接影響。注解本身沒有任何意義,單獨的注解就是一種注釋&am…

C/C++中的typedef 和 #define

C/C中的typedef 和 #define typedef C/C中的關鍵字typedef允許用戶為類型名來起一個新名字,通常會是縮寫或者能夠清晰表明類型含義的新名字。 例: typedef unsigned int UINT; UINT 100;值得注意的是,typedef除了為C/C內置的數據類型取別…

php3.2.3 升級,thinkphp3.2.3 升級到3.2.4時出錯問題

有些項目最初用OneThink做的,而OneThink 默認使用的TP 是3.2.0 的,沒事的時候就想給升級一下,但是直接復制進去的時候,有錯誤,導致OneThink 不能運行,排查后,需要修改兩個地方1、修改 Applicati…

Positional Encodings in ViTs 近期各視覺Transformer中的位置編碼方法總結及代碼解析 1

Positional Encodings in ViTs 近期各視覺Transformer中的位置編碼方法總結及代碼解析 最近CV領域的Vision Transformer將在NLP領域的Transormer結果借鑒過來,屠殺了各大CV榜單。對其做各種改進的頂會論文也是層出不窮,本文將聚焦于各種最新的視覺trans…

mysql 分析查詢語句,MySQL教程之SQL語句分析查詢優化

怎么獲取有功能問題的SQL1、經過用戶反應獲取存在功能問題的SQL2、經過慢查詢日志獲取功能問題的SQL3、實時獲取存在功能問題的SQL運用慢查詢日志獲取有功能問題的SQL首要介紹下慢查詢相關的參數1、slow_query_log 發動定制記載慢查詢日志設置的辦法,能夠經過MySQL指…

關于PyTorch中的register_forward_hook()函數未能執行其中hook函數的問題

關于PyTorch中的register_forward_hook()函數未能執行其中hook函數的問題 Hook 是 PyTorch 中一個十分有用的特性。利用它,我們可以不必改變網絡輸入輸出的結構,方便地獲取、改變網絡中間層變量的值和梯度。這個功能被廣泛用于可視化神經網絡中間層的 f…

geoda權重矩陣導入matlab,空間計量經濟學-分析解析.ppt

廈門大學 鄧明 空間截面回歸模型 地理加權回歸模型 地理加權回歸模型擴展了普通線性回歸模型。在GWR模型中,特定區位的回歸系數不再是利用全部信息獲得的假定常數,而是利用鄰近觀測值的子樣本數據信息進行局域(Local)回歸估計而得,并隨著空間…

樹莓派攝像頭基礎配置及測試

樹莓派攝像頭基礎配置 step 1 硬件連接 硬件連接,注意不要接反了,排線藍色一段朝向網口的方向。(筆者的設備是樹莓派4B) step 2 安裝raspi-config 安裝 raspi-config raspi-config在raspbian中是預裝的,而在kali、…

matlab sobel銳化,sobel銳化 - yirui wu.ppt

sobel銳化 - yirui wu第六章 圖像銳化 圖像銳化的概念 圖像銳化的目的是加強圖像中景物的細節邊緣和輪廓。 銳化的作用是使灰度反差增強。 因為邊緣和輪廓都位于灰度突變的地方。所以銳化算法的實現是基于微分作用。 圖像銳化方法 圖像的景物細節特征; 一階微分銳化…

使用百度云智能SDK和樹莓派搭建簡易的人臉識別系統 Python語言版

硬件 樹莓派4B一個CSI攝像頭一個 筆者使用的是樹莓派4B和CSI攝像頭,但是樹莓派3和USB攝像頭等相似設備均可。 百度云智能設置 Step 1 登錄 百度云智能 網址https://cloud.baidu.com/ 首先登錄百度賬號,與百度云、百度貼吧等互通,可直接…

php 5.6 引用傳遞,升級到5.6.x后如何在php中修復引用傳遞

我最近將fom php 5.2升級到5.6,并且有一些代碼我無法修復://Finds users with the same ip- or email-addressfunction find_related_users($user_id) {global $pdo;//print_R($pdo);//Let SQL do the magic!$sth $pdo->prepare(CALL find_related_users(?));$…

RuntimeError: [enforce fail at inline_container.cc:145] . PytorchStreamReader failed reading zip arc

RuntimeError: [enforce fail at inline_container.cc:145] . PytorchStreamReader failed reading zip archive: failed finding central directory 原因分析 這個報錯是出現在PyTorch在讀入模型參數時: checkpoint torch.load(epoch_15.pth, map_locationcpu)…

xp搭建 php環境,windows xp 下 LAMP環境搭建

1. apache安裝步驟如下圖在瀏覽器中輸入:localhost,出現下面頁面說明已成功安裝apache。2. mysql安裝如下圖顯示在運行里面輸入cmd ,然后連接測試mysql ,如圖所示:3. php安裝(1)將php壓縮包解壓到安裝路徑中的php目錄…

C++中的虛函數(表)實現機制以及用C語言對其進行的模擬實現

C中的虛函數(表)實現機制以及用C語言對其進行的模擬實現 聲明:本文非博主原創,轉自https://blog.twofei.com/496/,博主讀后受益良多,特地轉載,一是希望好文能有更多人看到,二是為了日后自己查閱。 前言 …

php 前端模板 yii,php – Yii2高級模板:添加獨立網頁

我在backend / views / site下添加了help.php,并在SiteController.php下聲明了一個能夠識別鏈接的函數public function behaviors(){return [access > [class > AccessControl::className(),rules > [[actions > [login, error],allow > true,],[actions > […

C++中數組和指針的關系(區別)詳解

C中數組和指針的關系(區別)詳解 本文轉自:http://c.biancheng.net/view/1472.html 博主在閱讀后將文中幾個知識點提出來放在前面: 沒有方括號和下標的數組名稱實際上代表數組的起始地址,這意味著數組名稱實際上就是…

安裝php獨立環境,0507-php獨立環境的安裝與配置 Web程序 - 貪吃蛇學院-專業IT技術平臺...

1.在一個純英文目錄下新建三個文件夾2.安裝apache(選擇好版本)過程中該填的按格式填好,其余的只更改安裝目錄即可如果報錯1901是安裝版本的問題。檢查:安裝完成后localhost打開為It works!添加到電腦屬性環境變量:3.將php文件解壓文檔放到AMP…

linux中PATH變量-詳細介紹

轉自:https://blog.csdn.net/haozhepeng/article/details/100584451 轉載者勘誤 原文最后提到的 echo 命令對于環境變量的修改無影響。這是肯定的,echo 命令相當于只是一個打印的函數(比如 Python 中的 print)。這里要修改環境變…