26 OpenCV 查找边缘

文章目录

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

在这里插入图片描述

findContours 发现边缘

cv::findContours(
InputOutputArray  binImg, // 输入图像,非0的像素被看成1,0的像素值保持不变,8-bit
 OutputArrayOfArrays  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); // 在输出窗口中显示结果图像
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mac玩《幻兽帕鲁》为什么打不开D3DMetal?d3d错误怎么办 d3dxl error

我之前发了一篇讲Mac电脑玩Steam热门新游《幻兽帕鲁》的文章&#xff08;没看过的点这里&#xff09;&#xff0c;后来也看到很多朋友去尝试了&#xff0c;遇到了一些问题&#xff0c;无法进入《幻兽帕鲁》游戏&#xff0c;或者是玩的时候卡顿以及出现黑屏&#xff0c;通过我的…

Altium Designer中如何修改默认字体

Altium Designer软件安装后&#xff0c;原理图和PCB设计中的文本通常默认是Times New Roman。这是一种Windows系统安全字体&#xff0c;在很早之前的Windows系统中就已经默认安装了这个字体。这种字体对打印也比较友好&#xff0c;是一种很常见的印刷体。 但是这种字体对于习惯…

[Leetcode]930.和相同的二元子数组+992.K个不同整数的子数组 关键词:[子数组][滑窗]

文章目录 Leetcode 992方法一&#xff1a;滑窗右端每次1&#xff0c;左端来回滑动方法二&#xff1a;&#xff08;最多K种的子串数&#xff09; - &#xff08;最多K-1种的子串数&#xff09; 恰好K种 Leetcode 930方法一&#xff1a;&#xff08;最多和为goal的子串数&#x…

移动app测试的好处简析,有必要选择第三方软件测试机构吗?

移动app测试是指对移动应用程序进行全面、系统和深入的检查和验证&#xff0c;以确保其功能、性能和稳定性达到预期要求。在移动应用市场日益竞争激烈的今天&#xff0c;进行移动app测试是至关重要的。 一、移动app测试的好处&#xff1a;   1、具有确保应用质量的作用。通过…

Linux 在线yum安装: PostgreSQL 15.6数据库

Linux 在线yum安装&#xff1a; PostgreSQL 15.6数据库 1、PostgreSQL数据库简介2、在线安装PostgreSQL15.63、配置 PostgreSQL的环境变量4、使用默认用户登录PostgreSQL5、配置 PostgreSQL 允许远程登录6、修改 PostgreSQL 默认端口7、创建数据库和表、远程用户zyl8、pgAdmin远…

基于Java的APK检测管理系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 开放平台模块2.3 软件档案模块2.4 软件检测模块2.5 软件举报模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 开放平台表3.2.2 软件档案表3.2.3 软件检测表3.2.4 软件举报表 四、系统展示五、核心代…

机器学习-06-无监督算法-02-层次聚类和密度聚类DBSCAN算法

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中无监督算法&#xff0c;包括层次和密度聚类等。 参考 DBSACN在线动态演示 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算…

摸鱼小技巧来啦,速来围观

一、前言 在日常测试中&#xff0c;很多小伙伴还是选择使用usb连接设备的方式去进行跑测&#xff0c;当需要连接多台设备就没办法在电脑上插入这么多设备&#xff0c;只能选择使用无线连接的方式去进行连接测试。你们快来get这份详细的无线连接设备教程吧~ 二、远程连接Andro…

demo版多人聊天系统

目录 ​编辑 一&#xff0c;引入 二&#xff0c;在Server端修改的代码 1&#xff0c;保存用户信息功能实现 2&#xff0c;拼接消息 3&#xff0c;广播消息 三&#xff0c; Client端要修改的代码 四&#xff0c;效果演示 一&#xff0c;引入 在上一篇文章udp网络服务器中&a…

LLM+Embedding构建问答系统的局限性及优化方案

LangChain LLM 方案的局限性&#xff1a;LLM意图识别准确性较低&#xff0c;交互链路长导致时间开销大&#xff1b;Embedding 不适合多词条聚合匹配等。 背景 在探索如何利用大型语言模型&#xff08;LLM&#xff09;构建知识问答系统的过程中&#xff0c;我们确定了两个核心…

飞跃前端瓶颈:技术进阶指南精华篇

引言&#xff1a; 在互联网的快车道上&#xff0c;前端技术日新月异。对于前端工程师而言&#xff0c;技术水平达到一定高度后&#xff0c;往往会遭遇成长的天花板。本文将探讨如何识别并突破这些技术瓶颈&#xff0c;分享实用的进阶策略和实践案例。 一、技术等级概览&#xf…

python知识点总结(七)

python知识点总结七 1、堆和栈的区别2、如何在局部修改全局的变量a、计算结果b、计算结果 3、如何修改一个enclosing变量4、关于值传递还是地址传值5、布尔类型6、逻辑运算7、字符串切片操作8、取整、取余、除数9、变量赋值10、字符串与数字相乘11、整型、浮点型、字符型之间相…

【LVGL-特殊符号】

LVGL-特殊符号 ■ LVGL-特殊符号 ■ LVGL-特殊符号 /* 直接调用 */ lv_label_set_text(my_label, LV_SYMBOL_OK); /* 与字符一起用 */ lv_label_set_text(my_label, LV_SYMBOL_OK "Apply"); /* 多个符号一起用 */ lv_label_set_text(my_label, LV_SYMBOL_OK LV_SYMBO…

智过网:一级建造师必须两年考过吗?有效期多久?

在建筑行业&#xff0c;一级建造师的职业资格证书是众多从业者追求的目标。然而&#xff0c;获得这一证书并非易事&#xff0c;它要求考生不仅具备扎实的专业知识&#xff0c;还需要在限定的时间内完成所有科目的考试。那么&#xff0c;一级建造师是否必须在两年内考完所有科目…

LeetCode - 存在重复元素

219. 存在重复元素 II 这道题可以用两个方法解决。 哈希表 从左到右遍历数组&#xff0c;并将数组的下标存到hash中&#xff0c;在遍历数字的过程中&#xff0c;如果hash中不存在nums[i]&#xff0c;将nums[i]加入到hash当中&#xff0c;若存在&#xff0c;则判断下标之间的关…

九泰智库 | 医械周刊- Vol.16

⚖️ 法规动态 28类耗材联盟集采结果出炉&#xff0c;中选率仅27% 3月19日&#xff0c;河北省药械集采中心发布了《关于公示京津冀“3N”联盟28种集中带量采购医用耗材拟中选结果的通知》。共有202个产品被列为拟中选&#xff0c;产品中选率约为27%。本次集采未设置保底中标条…

buuctf_Reverse_wp_2

文章目录 [WUSTCTF2020]level3[base64变表]Youngter-drive[upx、多线程][FlareOn4]IgniteMe[算法分析]相册[APK、so文件、Native方法][WUSTCTF2020]Cr0ssfun[套娃、patience][GWCTF 2019]xxor[z3、算法分析][UTCTF2020]basic-re[FlareOn6]Overlong脚本输出动态调试 [FlareOn3]C…

科技强国:国产桌面操作系统正式上线,中国七位院士发表支持

操作系统是电子产品的核心&#xff0c;无论是手机还是电脑&#xff0c;都离不开它的支持。它是科技发展中至关重要的领域之一。备受瞩目的鸿蒙系统&#xff0c;作为国内颇具影响力的手机桌面操作系统&#xff0c;以其桌面组件自由整合和自定义风格的便捷性&#xff0c;引领了一…

运用YOLOv5实时监测并预警行人社交距离违规情况

YOLO&#xff08;You Only Look Once&#xff09;作为一种先进的实时物体检测算法&#xff0c;在全球范围内因其高效的实时性能和较高的检测精度受到广泛关注。近年来&#xff0c;随着新冠疫情对社交距离管控的重要性日益凸显&#xff0c;研究人员开始将YOLO算法应用于社交距离…