利用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.mzph.cn/news/532847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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指…

树莓派摄像头基础配置及测试

树莓派摄像头基础配置 step 1 硬件连接 硬件连接,注意不要接反了,排线蓝色一段朝向网口的方向。(笔者的设备是树莓派4B) step 2 安装raspi-config 安装 raspi-config raspi-config在raspbian中是预装的,而在kali、…

使用百度云智能SDK和树莓派搭建简易的人脸识别系统 Python语言版

硬件 树莓派4B一个CSI摄像头一个 笔者使用的是树莓派4B和CSI摄像头,但是树莓派3和USB摄像头等相似设备均可。 百度云智能设置 Step 1 登录 百度云智能 网址https://cloud.baidu.com/ 首先登录百度账号,与百度云、百度贴吧等互通,可直接…

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/,博主读后受益良多,特地转载,一是希望好文能有更多人看到,二是为了日后自己查阅。 前言 …

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)。这里要修改环境变…

php assert eval,代码执行函数之一句话木马

前言大家好,我是阿里斯,一名IT行业小白。非常抱歉,昨天的内容出现瑕疵比较多,今天重新整理后再次发出,修改并添加了细节,另增加了常见的命令执行函数如果哪里不足,还请各位表哥指出。eval和asse…

显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理

显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理 转自:https://www.cnblogs.com/marsggbo/p/11838823.html#nvccnvidia-smi GPU型号含义 显卡: 简单理解这个就是我们前面说的GPU,尤其指NVIDIA公司生产的GPU系列,因为后面介绍的…

VS Code的Error: Running the contributed command: ‘_workbench.downloadResource‘ failed解决

VS Code的Error: Running the contributed command: _workbench.downloadResource failed解决 转自:https://blog.csdn.net/ibless/article/details/118610776 1 问题描述 此前,本人参考网上教程在VS Code中配置了“Remote SSH”插件(比如这…

Oracle闪回报错,oracle 闪回区满了,ORA-19815

oracle 闪回区满了,查看日志报错:ORA-19815,命令行输入:sqlplus / as sysdbastartup mount //如果你的数据库出现了无法连接的情况时,可以加上这句select file_type, percent_space_used as used,percent_space_rec…

[2021-ICCV] MUSIQ Multi-scale Image Quality Transformer 论文简析

[2021-ICCV] MUSIQ: Multi-scale Image Quality Transformer 论文简析 论文:https://arxiv.org/abs/2108.05997 代码:https://github.com/google-research/google-research/tree/master/musiq 概述 当前SOTA的IQA(图像质量评估&#xff0…

安装oracle不动了,windows2008安装ORACLE到2%不动的问题 | 信春哥,系统稳,闭眼上线不回滚!...

最近又有网友遇到在windows2008服务器上安装ORACLE软件时到2%就卡住不动的问题,下面是该网友的描述:oralce 11g r2 windows server 2008 R2安装到最后一步复制数据文件时卡到2% 不走了内存一直飙升求解决这个问题前段时间也有人遇到过,但是他…

手把手教你入门Git --- Git使用指南(Linux)

手把手教你入门Git — Git使用指南(Linux) 系统:ubuntu 18.04 LTS 本文所有git命令操作实验具有连续性,git小白完全可以从头到尾跟着本文所有给出的命令走一遍,就会对git有一个初步的了解,应当能做到会用并…

php数据关系图,如何利用navicat查看数据表的ER关系图

文章背景:(相关推荐:navicat)由于工作需要,现在要分析一个数据库,然后查看各个表之间的关系,所以需要查看表与表之间的关系图,专业术语叫做ER关系图。默认情况下,Navicat显示的界面是这样的&…

Linux中g++与gcc的区别

转自:https://blog.csdn.net/bit_clearoff/article/details/53965514 Windows中我们常用vs来编译编写好的C和C代码;vs把编辑器,编译器和调试器等工具都集成在这一款工具中,在Linux下我们能用什么工具来编译所编写好的代码呢&#…

从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接

从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接 总览 我们将在Linux操作系统中,以C语言的Hello World程序为例,用gcc编译器分步执行这四个步骤。 我们有再熟悉不过的HelloWorld程序,hello.c: #include …

linux内核中cent文件夹,Centos 中如何快速定制二进制的内核 RPM 包

1、rpm 制作前的环境准备:yum install -y ncurses-devel qt-devel rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed xmlto audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel newt-devel python-devel zlib-devel bc2、准…