当前位置: 首页 > news >正文

边缘提取函数 [OPENCV--2]

OPENCV中最常用的边界检测是CANNY函数
下面展示它的用法

  • 通常输入一个灰度图像(边界一般和颜色无关)这样也可以简化运算
  • cv::Canny(inmat , outmat , therhold1, therhold2 ) 第一个参数是输入的灰度图像,第二个是输出的图像
  • 这两个参数都是引用类型,很方便
  • 下面的两个是门槛,一个是低阈值门槛,一个是高阈值门槛,只有高于低阈值的才算边界,高于高阈值的算是强边界
  • 你说值怎么取?CV本来就是很唯心的学科,这些参数肯定要自己调试了,在不同的实用环境中值不一样
  • 一般来说,保证TH2是TH 1的两倍到三倍即可
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>int main() {cv::utils::logging::setLogLevel(cv::utils::logging::LOG_LEVEL_ERROR);// 读取PNG图像cv::Mat image = cv::imread("PIC.jpg", cv::IMREAD_COLOR);if (image.empty()) {std::cerr << "无法读取图像文件" << std::endl;return -1;}// 转换为灰度图像cv::Mat gray;cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);// 初始化边缘图像向量std::vector<cv::Mat> edges(5);  // 初始化大小为5的向量for (int i = 0; i < 5; i++) {// 应用边缘检测(Canny)cv::Canny(gray, edges[i], i * 100, 150, 3);// 创建并调整窗口大小cv::namedWindow("edges" + std::to_string(i), cv::WINDOW_NORMAL);  // 使用WINDOW_NORMAL标志,允许调整窗口大小cv::resizeWindow("edges" + std::to_string(i), 800, 600);  // 调整窗口大小为800x600// 显示边缘图像cv::imshow("edges" + std::to_string(i), edges[i]);}cv::waitKey();return 0;
}

下面是程序的执行效果,可以看出,随着下门槛的提高,边界越来越少
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4fba52e43827406f884567aeaa725664.pn

可见
1,随着下阈值的提高,强边缘被筛选出来
2,随着下阈值的提高,边缘信息越来越少

下面我们修改上阈值看看

  cv::Canny(gray, edges[i], i * 100, 150*i, 3);

0号图片是上门槛为0 的情况,所以噪音很多,上门槛不是越高越好,可见2,3,4几乎没有信息可言
在这里插入图片描述
就这样。ψ(`∇´)ψ

http://www.lryc.cn/news/488604.html

相关文章:

  • 插值原理(数值计算方法)
  • 【Pikachu】SSRF(Server-Side Request Forgery)服务器端请求伪造实战
  • IDEA怎么定位java类所用maven依赖版本及引用位置
  • Discuz论坛网站管理员的默认用户名admin怎么修改啊?
  • BIO、NIO、AIO的区别?
  • 音视频入门基础:MPEG2-TS专题(7)——FFmpeg源码中,读取出一个transport packet数据的实现
  • Flutter中sqflite的使用案例
  • 【2024 Optimal Control 16-745】【Lecture 2】integrators.ipynb功能分析
  • 【linux】ubuntu下常用快捷键【笔记】
  • 【Linux】常用命令练习
  • 力扣-Hot100-数组【算法学习day.37】
  • 表格不同类型的数据如何向量化?
  • 成都栩熙酷,电商服务新选择
  • 【java基础】微服务篇
  • 【LLM训练系列02】如何找到一个大模型Lora的target_modules
  • uni-app快速入门(八)--常用内置组件(上)
  • 基于Amazon Bedrock:一站式多模态数据处理新体验
  • FAX动作文件优化脚本(MAX清理多余关键帧插件)
  • Chapter 2 - 16. Understanding Congestion in Fibre Channel Fabrics
  • mysql数据库(六)pymysql、视图、触发器、存储过程、函数、流程控制、数据库连接池
  • RFdiffusion EuclideanDiffuser类解读
  • Flutter实现气泡提示框学习
  • vue3 路由守卫
  • 【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.
  • 如何控制自己玩手机的时间?两台苹果手机帮助自律
  • 【java-Neo4j 5开发入门篇】-最新Java开发Neo4j
  • Python的3D可视化库 - vedo (1)简介和模块功能概览
  • 全面解析:HTML页面的加载全过程(一)--输入URL地址,与服务器建立连接
  • elasticsearch的倒排索引是什么?
  • Ubuntu VNC Session启动chromium和firefox报错