c++图像的边缘检测

news2024/11/25 4:51:44

图像的边缘检测

cv::Canny 是 OpenCV 中用于进行边缘检测的函数,特别是用于检测图像中的边缘。Canny 边缘检测是一种广泛使用的技术,它能够识别图像中的边缘,这些边缘通常表示对象之间的边界或图像中的显著特征

void cv::Canny(const cv::Mat& image, cv::Mat& edges, double threshold1, double threshold2, int apertureSize = 3, bool L2gradient = false);



参数说明:

    image:输入图像,需要进行边缘检测的图像,通常是灰度图像。
    edges:输出图像,用于存储检测到的边缘。
    threshold1:第一个阈值,用于边缘检测的强度梯度。
    threshold2:第二个阈值,用于连接边缘的弱边缘梯度。
    apertureSize:(可选)Sobel 算子的核大小,默认为3。
    L2gradient:(可选)一个布尔值,指定是否使用更精确但计算量更大的 L2 范数来计算梯度幅度,默认为false,通常使用 L1 范数。
图像边缘检测案例
#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;
#include <iostream>
#include <fstream>

#include <opencv2/opencv.hpp>

int main() {
    // 读取图像
    cv::Mat inputImage = cv::imread("1.png", cv::IMREAD_GRAYSCALE);//先把图像改成灰色图才能进行边缘的处理

    // 检查图像是否成功加载
    if (inputImage.empty()) {
        std::cerr << "无法加载图像" << std::endl;
        return -1;
    }

    // 创建一个输出图像
    cv::Mat edges;

    // 使用Canny边缘检测
    double lowThreshold = 50; // 低阈值
    double highThreshold = 150; // 高阈值
    int apertureSize = 3; // Sobel算子内核大小
    cv::Canny(inputImage, edges, lowThreshold, highThreshold, apertureSize);//

    // 显示原始图像和边缘检测结果
    cv::imshow("原始图像", inputImage);
    cv::imshow("边缘检测结果", edges);

    // 等待用户按下键盘任意键后关闭窗口
    cv::waitKey(0);

    return 0;
}

在这里插入图片描述

使用3×3的内核进行降噪再进行边缘检测案例

#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;
#include <iostream>
#include <fstream>
using namespace cv; //包含cv命名空间
int main() {
    // 读取图像
    cv::Mat srcImage = cv::imread("1.jpg");//先把图像改成灰色图才能进行边缘的处理

    imshow("【原始图】Canny边缘检测", srcImage);
    Mat dstImage, edge, grayImage; //参数定义
    //【1】创建与 src同类型和大小的矩阵(dst)
    dstImage.create(srcImage.size(), srcImage.type());
        //【2】将原图像转换为灰度图像
        //此句代码的OpenCV2版为:
        //cvtColor( srcImage, grayImage, CV_BGR2GRAY )
        //此句代码的 OpenCV3版为:
    cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);
            //【3】先使用 3×3内核来降噪
            blur(grayImage, edge, Size(3, 3));
    //【4】运行Canny算子
    Canny(edge, edge, 3, 9, 3);
    //【5】显示效果图
    imshow("【效果图】Canny边缘检测", edge);
    waitKey(0);
    return 0;
}

在这里插入图片描述

打开摄像头进行边缘检测

#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;


int main()
{
	//从摄像头读入视频
	VideoCapture capture(0);
	Mat edges;
	//循环显示每一帧
	while (1)
	{
		//【1】读入图像
		Mat frame;//定义一个 Mat变量,用于存储每一帧的图像
		capture >> frame; //读取当前帧
		//【2】将原图像转换为灰度图像
		cvtColor(frame, edges, CV_BGR2GRAY);//转化 BGR彩色图为灰度图
		//【3】使用 3x3内核来降噪(2x3+1=7)
		blur(edges, edges, Size(7, 7));//进行模糊
		//【4】进行canny边缘检测并显示
		Canny(edges, edges, 0, 30, 3);
		imshow("被 canny后的视频", edges);//显示经过处理后的当前帧
		if (waitKey(30) >= 0) break;//延时30ms
	}
	return 0;
}

在这里插入图片描述

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

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

相关文章

linux 查看CPU架构是AMD还是ARM

要查看 Linux 系统的 CPU 架构是 AMD 还是 ARM&#xff0c;可以使用以下命令&#xff1a; 使用 lscpu 命令并查找 Architecture 字段&#xff1a; lscpu | grep Architecture如果输出结果中包含 x86_64 或 i686&#xff0c;则表示系统的 CPU 架构是 AMD&#xff08;或者是 x86…

地球红薯地中秋圆《乡村振兴战略下传统村落文化旅游设计》——世界旅行季许少辉八月新书辉少许

地球红薯地中秋圆《乡村振兴战略下传统村落文化旅游设计》——世界旅行季许少辉八月新书辉少许 地球红薯地中秋圆《乡村振兴战略下传统村落文化旅游设计》——世界旅行季许少辉八月新书辉少许

Python中的用法与常见问题解析

装饰器是Python语言中一种强大且常用的概念。通过装饰器&#xff0c;我们可以在不修改原始函数代码的情况下&#xff0c;给函数添加额外的功能&#xff0c;比如日志记录、性能分析、输入验证等。在本文中&#xff0c;我们将深入探讨Python中装饰器的用法和常见问题&#xff0c;…

接口自动化测试:pytest基础讲解

为什么要做接⼝测试&#xff1f; 只靠前端测试很难确保很⾼的覆盖率。接⼝测试&#xff0c;可以模拟出各种类型的⼊参&#xff0c;包括⼀些在前端模拟不出来的⼊参&#xff0c;还能根据接⼝⽂档的定义&#xff0c;设计出相对完善的⼊参值&#xff0c;在接⼝层保证质量&#xff…

@PostMapping‘ not applicable to type 这个是什么原因

PostMapping’ not applicable to type 这个是什么原因 这个错误的意思是 ‘PostMapping’ 注解没有被正确地应用到一个合适的元素上。在Spring MVC中&#xff0c;PostMapping通常用于注解一个处理HTTP POST请求的方法。 出现这个错误&#xff0c;可能的原因有&#xff1a; …

【STM32】读写内部Flash初步使用

基于stm32f103&#xff0c;作为个人学习记录使用 STM32 芯片内部有一个 FLASH 存储器&#xff0c;它主要用于存储代码,在紧急状态下常常会使用内部 FLASH 存储关键记录&#xff1b; 内部 FLASH 的构成 STM32 的内部 FLASH 包含主存储器、系统存储器以及选项字节区域 大容量…

手机相机系统介绍

目录 一张照片是如何生成的? 相机的成像原理 相机硬件 颜色四要素 相机硬件三大块 模组结构 镜头 镜头光路 镜头常见参数 镜头-FOV&EFL 镜头-焦距 镜头-光圈 图像传感器 图像传感器-像素-底 RGB排布 图像传感器-Pattern & PDAF Sensor CMOS sensor …

Python中的单元测试与代码覆盖率:实践与问题解决

当我们开发软件时&#xff0c;单元测试和代码覆盖率是非常重要的工具。它们可以帮助我们验证代码的正确性&#xff0c;并确保代码的质量和稳定性。在Python中&#xff0c;我们有很多强大的工具和库来进行单元测试和代码覆盖率分析。本文将向你分享在Python中进行单元测试和代码…

C++单例模式各种实现方式,终极版即简单又线程安全,无脑用就完了

&#x1f4cb; 前言 &#x1f5b1; 博客主页&#xff1a;在下马农的碎碎念&#x1f917; 欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;✍ 本文由在下马农原创&#xff0c;首发于CSDN&#x1f4c6; 首发时间&#xff1a;2023/8/25&#x1f4c5; 最近更新时…

学生宿舍管理系统(前端java+后端Vue)实现-含前端与后端程序

界面介绍 登录 ###宿舍管理 ###菜单管理 ###角色管理 ###班级管理

编程每日一练(多语言实现):判断偶数

文章目录 一、实例描述二、技术要点三、代码实现3.1 C 语言实现3.2 Python 语言实现3.3 Java 语言实现 一、实例描述 利用单条件单分支选择语句判断输入的一个整数 是否是偶数。 运行程序&#xff0c;输入一个 整数18&#xff0c; 然后按回车键&#xff0c;将提示该数字是偶数…

性能压力测试的定义及步骤是什么

在今天的数字化时代&#xff0c;软件系统的性能和稳定性对于企业的成功至关重要。为了确保软件在高负载和压力情况下的正常运行&#xff0c;性能压力测试成为了不可或缺的环节。本文将介绍性能压力测试的定义、步骤。 一、性能压力测试的定义和目标 性能压力测试是通过模拟实际…

Spring整合RabbitMQ——生产者

添加依赖坐标&#xff0c;在producer和consumer模块的pom文件中各复制一份。 配置producer的配置文件 配置producer的xml配置文件 编写测试类发送消息

[GXYCTF2019]BabySQli 1

进去就是两个登录框 先试了试adminadmin&#xff0c;然后显示wrong pass 试了下万能密码 1 or 11 查看下页面源代码 放到瑞士军刀解密一下 用fuzz字典跑一下 会发现order被过滤了 所以order用Order来过滤 admin Order by 3-- 得到字段数为3 然后判断一下注入点 判断得到这题…

ESD门禁闸机的用途及优点

ESD门禁闸机是一种专门用于防止静电干扰的门禁设备&#xff0c;其主要用途包括&#xff1a; 防止静电干扰&#xff1a;ESD门禁闸机可以有效地防止静电干扰&#xff0c;保护电子元器件、电路板等敏感设备不受静电破坏。 控制人员进出&#xff1a;ESD门禁闸机可以通过身份验证等…

后端配置(宝塔):处理php禁用函数

一、找到php的文件路径 在软件商店中&#xff0c;找到已安装文件&#xff0c;选择需要更改的php文件&#xff0c;选择“设置” 二、选择需要取消禁用的文件进行删除 扩展&#xff1a;可解决 The Process class relies on proc_open, which is not available on your PHP i nst…

deepin DTK(Development ToolKit)已正式适配 Qt6!

导读近日&#xff0c;深度 deepin 宣布 deepin DTK&#xff08;Development ToolKit&#xff09;已正式适配 Qt6 (6.4.2)&#xff0c;实现全面升级。 DTK 作为 deepin 基于 Qt 开发的一整套简单且实用的通用开发框架&#xff0c;处于 deepin 操作系统中的核心位置&#xff0c;此…

基于YOLOv8模型的空中视角下车辆检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的空中视角下车辆检测系统可用于日常生活中检测与定位bus、cycle、truck、van、vehicle目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统…

[AFCTF 2018]你能看出这是什么加密么

最开始是我对rsa的小小的理解 rsa也就是非对称加密算法&#xff0c;拥有公开的加密密钥和解密密钥&#xff0c;这也是我们写脚本的基础 选取素数p和q&#xff0c;计算乘积npq&#xff0c;以及(n)(p-1)(q-1)。&#xff08;欧拉函数&#xff09; 选择一个e值作为密钥…

组合数4 高精度计算组合数

一般来说需要高精乘和高精除&#xff0c;但化简为质因子形式后只用高精乘。 一个阶乘n中因子p的个数&#xff1a; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int&…