26 OpenCV 查找边缘

文章目录

  • findContours 发现边缘
  • drawContours 绘制边缘
  • 大致流程
  • 示例

在这里插入图片描述

findContours 发现边缘

cv::findContours(
InputOutputArray  binImg, // 输入图像,非0的像素被看成1,0的像素值保持不变,8-bitOutputArrayOfArrays  contours,//  全部发现的轮廓对象
OutputArray,  hierachy// 图该的拓扑结构,可选,该轮廓发现算法正是基于图像拓扑结构实现。
int mode, //  轮廓返回的模式
int method,// 发现方法
Point offset=Point()//  轮廓像素的位移,默认(0, 0)没有位移
)

drawContours 绘制边缘

drawContours(
InputOutputArray  binImg, // 输出图像OutputArrayOfArrays  contours,//  全部发现的轮廓对象
Int contourIdx// 轮廓索引号
const Scalar & color,// 绘制时候颜色
int  thickness,// 绘制线宽
int  lineType ,// 线的类型LINE_8
InputArray hierarchy,// 拓扑结构图
int maxlevel,// 最大层数, 0只绘制当前的,1表示绘制绘制当前及其内嵌的轮廓
Point offset=Point()// 轮廓位移,可选

大致流程

  • 输入图像转为灰度图像cvtColor
  • 一系列降噪处理
  • 一系列图像的增强
  • 一系列阈值处理
  • 使用Canny进行边缘提取,得到二值图像
  • 使用findContours寻找轮廓
  • 使用drawContours绘制轮廓

示例

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>using namespace std;
using namespace cv;Mat src, dst; // 定义原始图像和结果图像
const char* output_win = "findcontours-demo"; // 定义输出窗口名称
int threshold_value = 100; // 初始阈值设为100
int threshold_max = 255; // 最大阈值为255
RNG rng; // 随机数生成器// Contours演示函数声明
void Demo_Contours(int, void*);int main(int argc, char** argv) {src = imread("D:/vcprojects/images/happyfish.png"); // 读取图像if (src.empty()) {printf("could not load image...\n");return -1;}namedWindow("input-image"); // 创建输入图像窗口namedWindow(output_win); // 创建输出图像窗口imshow("input-image", src); // 在输入窗口中显示原始图像cvtColor(src, src, CV_BGR2GRAY); // 将彩色图像转换为灰度图像const char* trackbar_title = "Threshold Value:"; // 创建滑动条标题createTrackbar(trackbar_title, output_win, &threshold_value, threshold_max, Demo_Contours); // 创建阈值滑动条Demo_Contours(0, 0); // 初始化Contours函数waitKey(0); // 等待按键return 0;
}void Demo_Contours(int, void*) {Mat canny_output; // Canny边缘检测输出vector<vector<Point>> contours; // 存储轮廓点集vector<Vec4i> hierachy; // 轮廓层级关系// 进行Canny边缘检测Canny(src, canny_output, threshold_value, threshold_value * 2, 3, false);// 查找图像中的轮廓findContours(canny_output, contours, hierachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));// 创建与原始图像相同大小的空白图像dst = Mat::zeros(src.size(), CV_8UC3);// 循环绘制轮廓RNG rng(12345); // 随机数生成器for (size_t i = 0; i < contours.size(); i++) {Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)); // 随机颜色drawContours(dst, contours, i, color, 2, 8, hierachy, 0, Point(0, 0)); // 绘制轮廓}imshow(output_win, dst); // 在输出窗口中显示结果图像
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761009.shtml

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

相关文章

libVLC 轨道信息

libVLC是一个流行的开源多媒体播放器框架&#xff0c;它提供了丰富的 API 用于开发视频播放相关的应用程序。获取轨道信息&#xff0c;是指获取当前媒体文件的音频、视频或字幕等轨道信息。 常见的视频文件一般都有音频和视频、特殊的会带有字幕文件。 媒体轨道信息结构存放在…

前端学习目录

1.前端系列 前端全系列 2.es6 20分钟上手ES6ES6新特性详解 3.vue vue2.0尚硅谷Vue2.0Vue3.0全套教程

ARM/Linux嵌入式面经(八):OPPO三面

OPPO三面 一面(4.2,20min) # 1.自我介绍# 2.三个项目,问的很详细后面专门会出一版怎么做自我介绍,以及项目怎么写,会怎么问,你该怎么回答。 3.SPI是什么?有几条线?几种模式? SPI协议简介 板卡内不同芯片间通讯最常用的三种串行协议:UART、I2C、SPI,之前写过串口协…

国际数字影像产业园:专注于数字影像领域的成都数字产业园

国际数字影像产业园&#xff08;数媒大厦&#xff09;&#xff0c;作为一个专注于数字影像产业的成都数字产业园&#xff0c;其服务优势体现在三大生态服务体系&#xff1a;公共服务、公务服务、产业服务。这三大服务体系不仅共享化、数字化、产业化&#xff0c;更致力于为企业…

elasticsearch-java api 8 升级

es client api 升级 背景 公司项目从sring-boot2 升级到了spring-boot3 &#xff0c;es的服务端也跟着升级到了es8 &#xff0c;而es的客户端7和服务端8 是不兼容的&#xff0c; 客户端es 7使用的是&#xff1a; elasticsearch-rest-high-level-client es 8 升级到&#xf…

太阳能光伏储能系统应用前景分析

所谓太阳能光伏储能系统&#xff0c;就是指将太阳能光伏发电与储能技术相结合&#xff0c;把光伏发电所产生的电能使用储能技术存储起来&#xff0c;在需要使用时供应电力&#xff0c;以此来确保发电的稳定性。 一、太阳能光伏储能系统的优势 1.可再生能源 利用太阳能作为能源…

单词倒排 例题

描述 对字符串中的所有单词进行倒排。 说明&#xff1a; 1、构成单词的字符只有26个大写或小写英文字母&#xff1b; 2、非构成单词的字符均视为单词间隔符&#xff1b; 3、要求倒排后的单词间隔符以一个空格表示&#xff1b;如果原字符串中相邻单词间有多个间隔符时&…

API开发亚马逊电商接口获得AMAZON商品详情API接口请求接入演示

为了使用亚马逊的API接口获取商品详情&#xff0c;你需要遵循以下步骤&#xff1a; 注册并登录开发者中心&#xff0c;创建一个应用并获取API Key和Key Secret。 使用Client ID和Client Secret获取访问令牌&#xff08;Access Token&#xff09;。 使用访问令牌&#xff08;A…

24.两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

【Spring Cloud】微服务注册中心的工作原理

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陆离 本文封面由 凯楠&#x1f4f7; 友情提供&#xff01; 目录 前言 1. 注册中心的主要作用 2. 常见的注册中心 3. Nacos 服务注册和发…

面试真经(运维工程师)

1.熟悉的排序算法有哪些&#xff0c;它们的时间空间复杂度如何? 排序算法主要分为内部排序和外部排序。内部排序指的是数据记录在内存中进行排序&#xff0c;而外部排序则适用于排序的数据量很大&#xff0c;一次不能容纳全部排序记录的情况&#xff0c;需要在排序过程中访问…

关于VMware Workstation Pro无法与Windows互相进行复制粘贴的解决方案

说明&#xff1a;要实现Windows在wmware虚拟机上实现复制粘贴需要在虚拟机上下载 VMware Tools 工具。 1.查看虚拟机是否下载了VMware Tools工具。&#xff08;下载了vMware Tools 会变成灰色的&#xff09; 2.要是成功安装的话&#xff0c;你在去改一下这里。 设置完到这里理…

GOF23种设计模式

GOF&#xff08;Gang of Four&#xff09;设计模式是指《设计模式&#xff1a;可复用面向对象软件的基础》&#xff08;Design Patterns: Elements of Reusable Object-Oriented Software&#xff09;这本书中介绍的23种经典设计模式。这些设计模式被分为三大类&#xff1a;创建…

【面试题】HashMap为什么可以插入null而Hashtable就不可以(源码分析)

首先hashmap可以插入null值&#xff0c;但是hashtable和hashcurrentHashmap是不支持的&#xff1b;这是因为在 hashmap对插入key为null进行了特殊处理&#xff0c;当插入的值为null的时候会将哈希值设置为0 但是hashtable会直接抛出异常&#xff1a; 并且hashmap是线程不…

笔记:Mysql 主从搭建

主库 创建用户并授权 create user slave identified with mysql_native_password by 123456 GRANT REPLICATION SLAVE ON *.* to slave%; FLUSH PRIVILEGES;主库配置文件 /etc/my.cnf #日志路径及文件名&#xff0c;目录要是mysql有权限写入 log-bin/var/lib/mysql/binlog …

什么是索引及其优缺点

1.1 什么是索引 索引是数据库中用于提高检索性能的排好序的数据结构。它类似于书籍的目录&#xff0c;通过建立特定的数据结构将某个列或多个列的值与它们在数据库中的行关联起来&#xff0c;以加快查询速度。 1.2 索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引…

IT廉连看——职场经验——简历里:兴趣爱好怎么写?

你可能觉得&#xff0c;这有啥可讲的嘛&#xff1f;别小看它。一个经验丰富的面试官&#xff0c;能从这个环节一窥你的真实个性和能力。 遗憾的是&#xff0c;大部分人都是随便填的&#xff0c;比如万年不变的读书、看电影之类&#xff0c;这其实浪费了一次强化能力优势的机会…

流畅的 Python 第二版(GPT 重译)(七)

第十三章&#xff1a;接口、协议和 ABCs 针对接口编程&#xff0c;而不是实现。 Gamma、Helm、Johnson、Vlissides&#xff0c;《面向对象设计的第一原则》 面向对象编程关乎接口。在 Python 中理解类型的最佳方法是了解它提供的方法——即其接口——如 “类型由支持的操作定义…

openssl3.2 - exp - openssl speed test

文章目录 openssl3.2 - exp - openssl speed test概述笔记表面上能列出的算法集合没列出的算法, 有的也支持不支持的算法的例子直接提示算法不支持算法的属性找不到到底哪些算法才是可以测试的算法?那看看哪些算法是支持的?包含支持的算法的名称数组在算法失败的提示处, 将支…

【一起学Rust | 基础篇】rust线程与并发

文章目录 前言一、创建线程二、mpsc多生产者单消费者模型1.创建一个简单的模型2.分批发送数据3. 使用clone来产生多个生产者 三、共享状态&#xff1a;互斥锁1. 创建一个简单的锁2. 使用互斥锁解决引用问题 前言 并发编程&#xff08;Concurrent programming&#xff09;&#…