OpenCV绘图函数(4)绘制轮廓线的函数drawContours()的使用

ops/2024/9/19 0:39:10/ 标签: opencv, 人工智能, 计算机视觉
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

函数会在图像中绘制轮廓线,如果 thickness ≥ 0,则绘制轮廓线;如果 thickness < 0,则填充由轮廓包围的区域。下面的例子展示了如何从二值图像中检索连接组件并对其进行标记:

#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{Mat src;// the first command-line parameter must be a filename of the binary// (black-n-white) imageif( argc != 2 || !(src=imread(argv[1], IMREAD_GRAYSCALE)).data)return -1;Mat dst = Mat::zeros(src.rows, src.cols, CV_8UC3);src = src > 1;namedWindow( "Source", 1 );imshow( "Source", src );vector<vector<Point> > contours;vector<Vec4i> hierarchy;findContours( src, contours, hierarchy,RETR_CCOMP, CHAIN_APPROX_SIMPLE );// iterate through all the top-level contours,// draw each connected component with its own random colorint idx = 0;for( ; idx >= 0; idx = hierarchy[idx][0] ){Scalar color( rand()&255, rand()&255, rand()&255 );drawContours( dst, contours, idx, color, FILLED, 8, hierarchy );}namedWindow( "Components", 1 );imshow( "Components", dst );waitKey(0);
}

函数原型


void cv::drawContours
(	InputOutputArray 	image,InputArrayOfArrays 	contours,int 	contourIdx,const Scalar & 	color,int 	thickness = 1,int 	lineType = LINE_8,InputArray 	hierarchy = noArray(),int 	maxLevel = INT_MAX,Point 	offset = Point() 
)		

参数

  • 参数image 目标图像。
  • 参数icontours 所有输入的轮廓。每个轮廓存储为点向量。
  • 参数icontourIdx 指示要绘制的轮廓的参数。如果它是负数,则绘制所有轮廓。
  • 参数icolor 轮廓的颜色。
  • 参数ithickness 绘制轮廓所用线条的粗细。如果它是负数(例如,thickness=FILLED),则绘制轮廓内部。
    l- 参数iineType 线条连接方式。参见 LineTypes。
  • 参数ihierarchy 关于层次结构的可选信息。仅当你想要绘制部分轮廓时需要它(参见 maxLevel)。
  • 参数imaxLevel 要绘制的轮廓的最大层级。如果它是 0,则仅绘制指定的轮廓。如果它是 1,则函数绘制轮廓及其所有的嵌套轮廓。如果它是 2,则函数绘制轮廓、所有嵌套轮廓以及所有嵌套至嵌套的轮廓等。此参数仅在存在层次结构的情况下有效。
  • 参数ioffset 可选的轮廓偏移参数。将所有绘制的轮廓按照指定的偏移 (dx, dy) 进行平移。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main( int argc, const char** argv )
{std::vector< std::vector< cv::Point > > contours;std::vector< cv::Vec4i > hierarchy;cv::Mat image3 = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/qiu.jpg", cv::IMREAD_GRAYSCALE );// 二值化图像cv::Mat binary;cv::threshold( image3, binary, 200, 255, cv::THRESH_BINARY );cv::findContours( binary, contours, hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE );Mat frame = Mat::zeros( image3.size(), CV_8UC3 );for ( size_t i = 0; i < contours.size(); i++ ){// 蓝色颜色cv::Scalar color( 255, 0, 0 );// 只绘制第一层的轮廓cv::drawContours( frame, contours, static_cast< int >( i ), color, 2, cv::LINE_8, hierarchy, 0 );}imshow( "原图", image3 );imshow( "画轮廓", frame );waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述


http://www.ppmy.cn/ops/104359.html

相关文章

桥接模式-多类型登录方式的思考

桥接模式-SSO单点登录 背景:(业务细节已脱敏)需求:问题:解决方式: OAuth2.0 实现单点登录四种授权模式桥接模式优化问题代码实现 背景:(业务细节已脱敏) 基于实习期间的一个代码重构的思考——业务细节已脱敏 基于内部旧框架实现业务toB管理系统&#xff0c;需要迁移数据并新的…

学习笔记——后端项目中的相关技术 【随时更新】

文章目录 1. Session 共享1.0 cookie和session的工作流1.1 Cookie范围1.2 为什么要共享&#xff1f;1.3 如何共享存储1.4 session共享实现 2. 缓存的实现2.1 缓存分类2. 2 Redis 缓存实现2.1.1 Redis 的数据结构&#xff08;高频考点&#xff09;2.1.2 redisTemplate 自定义序列…

【学习笔记】卫星通信NTN 3GPP标准化进展分析(二)- 3GPP Release16 内容

一、引言&#xff1a; 本文来自3GPP Joern Krause, 3GPP MCC (May 14,2024) Non-Terrestrial Networks (NTN) (3gpp.org) 本文总结了NTN标准化进程以及后续的研究计划&#xff0c;是学习NTN协议的入门。 【学习笔记】卫星通信NTN 3GPP标准化进展分析&#xff08;一&#xff…

TCP和UDP的主要区别以及应用场景

目录 1.主要区别 2.应用场景 1.主要区别 TCP&#xff08;Transmission Control Protocol&#xff09;&#xff1a;有连接&#xff0c;可靠传输&#xff0c;面向字节流&#xff0c;全双工通讯&#xff1b; UDP&#xff08;User Datagram Protocol&#xff09;&#xff1a;无连…

MP条件构造器之常用功能详解(select、set)

文章目录 select使用范围方法签名参数说明示例过滤查询字段&#xff08;主键除外&#xff09;选择特定字段并过滤字段&#xff08;主键除外&#xff09; set使用范围方法签名参数说明示例动态根据条件设置更新字段使用映射设置字段 更多功能详解 select select 方法是 MyBatis…

Fine-Grained Egocentric Hand-Object(中文翻译)

精细化自我中心手-物体分割&#xff1a; 数据集、模型&#xff08;model&#xff09;与应用 灵芝张1, 盛昊周1, 西蒙斯滕特 $ {}^{2} $, 和健博石 $ {}^{1} $ 摘要。 自我中心视频提供了高保真度建模人类行为的细粒度信息。手和交互对象是理解观众行为和意图的一个关键方面。…

Maven学习(零基础到面试)

1.什么是Maven? maven是一款用于管理和构建java项目的工具 2.Maven的作用&#xff1f; 1.依赖管理&#xff1a;方便快捷的管理项目以来的资源&#xff08;jar包&#xff09;&#xff0c;避免版本冲突问题。 以前的项目需要创建lib包&#xff0c;将网上的jar包资源放入其中使用…

SSM框架整合指南

文章目录 SSM框架整合指南1. 环境准备2. 创建Maven项目3. 配置Spring4. 配置SpringMVC5. 配置MyBatis6. 开发Web层7. 运行和测试 SSM框架整合指南 在Java企业级应用开发中&#xff0c;SSM&#xff08;Spring、SpringMVC、MyBatis&#xff09;框架组合因其灵活性和强大的功能而…

【单片机开发】IAP技术详解及应用

【前言】 在单片机开发过程中&#xff0c;程序的烧录是一个至关重要的环节。随着技术的不断演进&#xff0c;单片机烧录方式也日益多样化。 【单片机开发】单片机的烧录方式详解&#xff08;ICP、IAP、ISP&#xff09;-CSDN博客文章浏览阅读775次&#xff0c;点赞14次&#x…

鸿蒙HSP,HAP,HAR

HAP HarmonyOS Ability Package, 是由代码&#xff0c;资源&#xff0c;第三方库&#xff0c;配置文件等打包生成的模块包 用于封装应用程序的各个模块&#xff0c;比如登录模块&#xff0c;具体某个业务模块&#xff0c;一个HAP中可能会包含一个或多个‘UIAbility’&#xff…

数据库系统

一.数据管理技术的产生和发展 数据库是长期存储在计算机内有组织&#xff0c;大量&#xff0c;共享的数据集合。它可以供各种用户共享&#xff0c;具有最小冗余度和较高数据独立性。 数据库管理系统在数据库建立&#xff0c;运用和维护时对数据库进行统一控制&#xff0c;以…

光纤FPV无人机技术详解

1. 技术基础与原理 光纤FPV&#xff08;First Person View&#xff0c;第一人称视角&#xff09;无人机技术&#xff0c;是将光纤通信技术与无人机技术相结合的一项创新技术。该技术通过光纤作为高速、低延迟的数据传输媒介&#xff0c;实现了无人机拍摄的高清视频信号实时回传…

淘宝扭蛋机小程序,市场发展下的潜在机遇

扭蛋机作为一个门槛低、性价比高的潮玩市场&#xff0c;吸引了不同年龄层的消费者。同时扭蛋机商品的上新也非常快&#xff0c;使得消费者对扭蛋机永远保持着新鲜感&#xff0c;促使了扭蛋机市场的快速发展。扭蛋机拥有未知性、收集性&#xff0c;对于酷爱收集的玩家来说&#…

集成电路学习:什么是DMA直接内存访问

DMA&#xff1a;直接内存访问 DMA&#xff0c;全称Direct Memory Access&#xff0c;即直接内存访问&#xff0c;是一种用于在计算机系统中实现数据传输的技术。以下是对DMA的详细解释&#xff1a; 一、DMA定义与原理 DMA技术允许外围设备&#xff08;如磁盘驱动器、网卡…

YeAudio音频工具的介绍和使用

夜雨飘零音频工具 这款Python音频处理工具功能强大&#xff0c;支持读取多种格式的音频文件。它不仅能够对音频进行裁剪、添加混响、添加噪声等多种处理操作&#xff0c;还广泛应用于语音识别、语音合成、声音分类以及声纹识别等多个项目领域。 安装 使用pip安装。 pip ins…

Redis(13)| 缓存与数据库数据一致性问题

本文讨论的前提&#xff1a; 不是一个事务&#xff0c;永远无法满足数据库和缓存的强一直性的;文中会列举不一致的逻辑场景;一定是依解决业务问题&#xff0c;和业务达成的共同目标为前提&#xff1b; 前言 只要用到多数据源存储同一份相同的数据&#xff0c;在更新时&#…

CSS学习2

CSS外观属性 一、文本颜色1. 英文描述2. 十六进制3. RGB表示法 二、行间距三、对齐方式四、首行缩进五、字间距六、单词间距七、颜色半透明八、文字阴影 一、文本颜色 1. 英文描述 <html><head><title>颜色</title><style>.red {color: red; /…

基于YOLO的车牌检测识别(YOLO+Transformer)

概述&#xff1a; 基于深度学习的车牌识别&#xff0c;其中&#xff0c;车辆检测网络直接使用YOLO侦测。而后&#xff0c;才是使用网络侦测车牌与识别车牌号。 车牌的侦测网络&#xff0c;采用的是resnet18&#xff0c;网络输出检测边框的仿射变换矩阵&#xff0c;可检测任意形…

【MySQL】插入优化篇——(少量插入数据优化&批量插入数据load指令)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

小程序面试题一

一、微信小程序有哪些基本文件类型&#xff1f; 微信小程序的基本文件类型主要包括以下几种&#xff1a; WXML&#xff08;WeiXin Markup Language&#xff09;&#xff1a;这是微信小程序的标记语言&#xff0c;类似于HTML&#xff0c;用于描述页面的结构。它构建了一套标签语…