使用c++视觉处理----canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测

news2024/11/17 4:32:12

使用c++视觉处理canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测

#include <opencv2/opencv.hpp>

int main() {
	// 读取图像
	cv::Mat image = cv::imread("1.jpg", cv::IMREAD_GRAYSCALE); // 转为灰度图像

	if (image.empty()) {
		std::cerr << "无法加载图像" << std::endl;
		return -1;
	}

	// 创建用于显示结果的窗口
	cv::namedWindow("边缘检测结果", cv::WINDOW_AUTOSIZE);

	// Canny边缘检测
	cv::Mat cannyEdges;
	cv::Canny(image, cannyEdges, 50, 150); // 50和150是低阈值和高阈值

	// Sobel边缘检测
	cv::Mat sobelX, sobelY;
	cv::Sobel(image, sobelX, CV_16S, 1, 0);
	cv::Sobel(image, sobelY, CV_16S, 0, 1);
	cv::Mat sobelEdges;
	cv::convertScaleAbs(sobelX, sobelX);
	cv::convertScaleAbs(sobelY, sobelY);
	cv::addWeighted(sobelX, 0.5, sobelY, 0.5, 0, sobelEdges);

	// Scharr滤波边缘检测
	cv::Mat scharrX, scharrY;
	cv::Scharr(image, scharrX, CV_16S, 1, 0);
	cv::Scharr(image, scharrY, CV_16S, 0, 1);
	cv::Mat scharrEdges;
	cv::convertScaleAbs(scharrX, scharrX);
	cv::convertScaleAbs(scharrY, scharrY);
	cv::addWeighted(scharrX, 0.5, scharrY, 0.5, 0, scharrEdges);

	// 显示结果
	cv::imshow("原始图像", image);
	cv::imshow("Canny边缘检测", cannyEdges);
	cv::imshow("Sobel边缘检测", sobelEdges);
	cv::imshow("Scharr边缘检测", scharrEdges);

	cv::waitKey(0);
	return 0;
}

在这里插入图片描述

调用本地相机实时检测:canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测

#include <opencv2/opencv.hpp>

int main() {
	cv::VideoCapture cap(0); // 打开本地相机(通常是0号摄像头)

	if (!cap.isOpened()) {
		std::cerr << "无法打开相机" << std::endl;
		return -1;
	}

	// 创建用于显示结果的窗口
	cv::namedWindow("实时边缘检测", cv::WINDOW_AUTOSIZE);

	while (true) {
		cv::Mat frame;
		cap >> frame; // 从相机捕获一帧图像

		if (frame.empty()) {
			std::cerr << "无法捕获图像" << std::endl;
			break;
		}

		// 转换为灰度图像
		cv::Mat grayImage;
		cv::cvtColor(frame, grayImage, cv::COLOR_BGR2GRAY);

		// Canny边缘检测
		cv::Mat cannyEdges;
		cv::Canny(grayImage, cannyEdges, 50, 150); // 50和150是低阈值和高阈值

		// Sobel边缘检测
		cv::Mat sobelX, sobelY;
		cv::Sobel(grayImage, sobelX, CV_16S, 1, 0);
		cv::Sobel(grayImage, sobelY, CV_16S, 0, 1);
		cv::Mat sobelEdges;
		cv::convertScaleAbs(sobelX, sobelX);
		cv::convertScaleAbs(sobelY, sobelY);
		cv::addWeighted(sobelX, 0.5, sobelY, 0.5, 0, sobelEdges);

		// Scharr滤波边缘检测
		cv::Mat scharrX, scharrY;
		cv::Scharr(grayImage, scharrX, CV_16S, 1, 0);
		cv::Scharr(grayImage, scharrY, CV_16S, 0, 1);
		cv::Mat scharrEdges;
		cv::convertScaleAbs(scharrX, scharrX);
		cv::convertScaleAbs(scharrY, scharrY);
		cv::addWeighted(scharrX, 0.5, scharrY, 0.5, 0, scharrEdges);

		// 显示实时边缘检测结果
		cv::imshow("原始图像", frame);
		cv::imshow("Canny边缘检测", cannyEdges);
		cv::imshow("Sobel边缘检测", sobelEdges);
		cv::imshow("Scharr边缘检测", scharrEdges);

		// 检查用户是否按下ESC键,然后退出循环
		if (cv::waitKey(1) == 27) {
			break;
		}
	}

	return 0;
}

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

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

相关文章

网络-网络状态网络速度

文章目录 前言一、网络状态二、网络速度 前言 本文主要记录如何监听网络状态和网络速度。 一、网络状态 获取当前网络状态: navigator.onLine // true:在线 false:离线监听事件&#xff1a;online&#xff08;联网&#xff09; 和 offline&#xff08;断网&#xff09; windo…

全国A级旅游景区清单数据(2023年更新)

全国A级旅游景区清单数据&#xff08;2023年更新&#xff09; 1.样本量&#xff1a;14847条 2.来源&#xff1a;政府公布资料 3.指标&#xff1a;景区名称、等级、所属省份、所属城市、所属区县、地址、当前等级评定时间、相关文件发布时间、坐标(GCJ02)Lng、坐标(GCJ02)Lat…

【Redis实战】分布式锁

分布式锁 synchronized只能保证单个JVM内部的线程互斥&#xff0c;不能保证集群模式下的多个JVM的线程互斥。 分布式锁原理 每个JVM内部都有自己的锁监视器&#xff0c;但是跨JVM&#xff0c;就会有多个锁监视器&#xff0c;就会有多个线程获取到锁&#xff0c;不能实现多JV…

分享一份关于 Rust 编程的学习指南

Rust是一种现代的系统级编程语言&#xff0c;以其注重内存安全、性能和并发性而闻名。学习Rust可以是一段有回报的旅程&#xff0c;为您打开构建强大高效应用的机会。无论您是经验丰富的开发者还是完全的初学者&#xff0c;本指南将通过精选的资源和技巧帮助您踏上Rust编程之旅…

【angular】实现简单的angular国际化(i18n)

文章目录 目标过程运行参考 目标 实现简单的angular国际化。本博客实现中文版和法语版。 将Hello i18n!变为中文版&#xff1a;你好 i18n!或法语版:Bonjour l’i18n !。 过程 创建一个项目&#xff1a; ng new i18nDemo在集成终端中打开。 添加本地化包&#xff1a; ng a…

景联文科技:3D点云标注应用场景和专业平台

3D点云技术之所以得到广泛发展和应用&#xff0c;主要是因为它能够以一种直观、真实和全面的方式来表示和获取现实世界中的三维信息。 3D点云的优势&#xff1a; 真实感和立体感&#xff1a;3D点云数据能够呈现物体的真实感和立体感&#xff0c;使观察者能够更直观地理解物体的…

Springboot整合阿里云OSS进行上传单个图片,多个图片,删除图片功能

1. 导入OSS依赖 <!-- 阿里云oss依赖 --><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version></dependency> 2. 进行OSS配置 package com.example.sushe…

[GAMES101]透视投影变换矩阵中为什么需要改变z值

透视投影需要保证&#xff0c;1.变换矩阵内的元素是常数&#xff0c;2.相对深度值不变&#xff08;绝对值不重要&#xff09;&#xff1b;若再加上变换后zNear和zFar平面上的点依旧在zNear和zFar平面上这两个条件&#xff08;实际上并不一定需要满足这两个条件&#xff09;&…

机器人制作开源方案 | 扫地机器人

1. 功能描述 扫地机器人是现代家庭清洁的得力助手&#xff0c;能够自主规划清扫路径&#xff0c;避开障碍物&#xff0c;有效覆盖整个清洁区域。扫地机器人的出现极大地减轻了家庭清洁的负担&#xff0c;节省了时间和精力&#xff0c;它可以定期清理地面&#xff0c;确保家居环…

043:mapboxGL鼠标点击提示source属性信息

第043个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中通过鼠标点击提示source属性信息。这里用到了popup弹窗,用到了click事件,用到了鼠标样式的变化等功能。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源…

正点原子嵌入式linux驱动开发——Busybox根文件系统构建

前面已经移植了TF-A、Uboot和Linux kernel&#xff0c;就剩最后一个 rootfs(根文件系统)了&#xff0c;本章就来学习一下根文件系统的组成以及如何构建根文件系统。这是Linux系统移植的最后一步&#xff0c;根文件系统构建好以后就意味着拥有了一个完整的、可以运行的最小系统 …

【C语言】求解数独 求数独的解的个数 多解数独算法

目录 什么是数独&#xff1f; 数独的解法&#xff1f; 数独DFS算法详解 1. 初始化条件 2. 填入已初始化的数独表 3. 填数独 4. 拓展问题 请问删掉数独中的哪两个数可以使得数独的解最大&#xff1f; 删除的是哪两个数&#xff1f; 最终代码 main函数&#xff08;如何执行…

前端-uniapp-开发指南

美团外卖微信小程序开发 uniapp-美团外卖微信小程序开发P1 成果展示P2外卖小程序后端&#xff0c;学习给小程序写http接口P3 主界面配置P4 首页组件拆分P13 外卖列表布局筛选组件商家 布局测试数据创建样式 请求商家外卖数据封装请求并发请求 uni-app框架调用https接口 开发小程…

UE4和C++ 开发-C++绑定widget的方式和初始化UI

C绑定widget的方式有两种&#xff0c;一种是使用meta (BindWidget)&#xff0c;一种是使用GetWidgetFromName(TEXT("")),两种方式都可以。一、meta BindWidget方式 注意这种绑定的方式UMG里面的空间名称需要与C里面声明的变量名称相同 Btn_StartU 二、GetWidge…

成都瀚网科技有限公司:怎么优化抖店体验分?

近年来&#xff0c;抖音电商平台凭借强大的用户基础和广阔的销售渠道吸引了越来越多的商家入驻。然而&#xff0c;对于新手卖家来说&#xff0c;提高抖店经验值却成了一件头疼的事情。那么&#xff0c;如何优化抖店体验分呢&#xff1f;本文将从产品质量、服务态度、运营策略等…

Springboot集成MyBatis实现查询表操作(二)

目录 第一章、准备1.1&#xff09;准备数据库表1.2&#xff09;创建springboot项目&#xff0c;添加依赖1.3&#xff09;使用mybatis逆向工程 第二章、代码开发2.1&#xff09;建包并编写代码2.2&#xff09;application配置文件2.3&#xff09;设置编译位置 第三章、测试访问3…

【NUMA平衡】浅入介绍NUMA平衡技术及调度方式

在云计算方案设计或项目问题处理的时候&#xff0c;经常会遇到NUMA平衡的问题&#xff0c;进行让人不清楚NUMA到底有何用&#xff0c;如何发挥作用&#xff0c;本文就NUMA技术原理和调度进行简要整理&#xff0c;方便后续需要时候查阅学习。 一.背景 一般的对称多处理器中&am…

基于SpringBoot的新闻稿件管理系统

目录 前言 一、技术栈 二、系统功能介绍 管理员模块的实现 用户信息管理 记者信息管理 审批员信息管理 记者模块的实现 新闻信息管理 审批员模块的实现 新闻信息管理 用户模块的实现 新闻信息 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信…

安装JoySSL的SSL证书有什么优势?

近年来&#xff0c;网络安全事件层出不穷&#xff0c;屡禁不止。 据统计仍有57%的网站未进行https加密&#xff0c;成为数据泄漏的“导火索”之一。 而SSL证书不仅仅可以保护网站数据安全&#xff0c;而且可以降低网站被第三方窃取或篡改的风险。 安装JoySSL证书的好处&#…

kaggle新赛:写作质量预测大赛【数据挖掘】

赛题名称&#xff1a;Linking Writing Processes to Writing Quality 赛题链接&#xff1a;https://www.kaggle.com/competitions/linking-writing-processes-to-writing-quality 赛题背景 写作过程中存在复杂的行为动作和认知活动&#xff0c;不同作者可能采用不同的计划修…