c++视觉处理---Scharr滤波器

Scharr滤波器: cv::Scharr

cv::Scharr 是OpenCV库中用于应用Scharr滤波器的函数。Scharr滤波器通常用于图像处理中的边缘检测和特征提取。这是 cv::Scharr 函数的基本用法:

cv::Scharr(src, dst, ddepth, dx, dy, scale, delta, borderType);
  • src: 输入图像,通常是灰度图像(单通道)。
  • dst: 输出图像,用于存储Scharr滤波器的结果。
  • ddepth: 输出图像的深度,通常设置为 CV_16S
  • dx: x方向的导数阶数。
  • dy: y方向的导数阶数。
  • scale: 可选参数,结果的缩放因子,默认为1。
  • delta: 可选参数,可选的加法常量,默认为0。
  • borderType: 可选参数,用于处理图像边界的方式,默认是 cv::BORDER_DEFAULT

cv::Scharr 函数通过应用Scharr滤波器对输入图像进行卷积,以计算图像中特定方向的边缘梯度。参数 dxdy 控制了梯度方向。通常, dxdy 分别设置为1和0以检测水平边缘,或者设置为0和1以检测垂直边缘。

这个函数允许您根据需要调整参数以满足不同的边缘检测和特征提取要求。它可用于许多计算机视觉和图像处理任务,包括物体检测、图像增强和特征提取。

Scharr滤波器检测边缘

#include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image = cv::imread("your_image.jpg", cv::IMREAD_GRAYSCALE); // 转为灰度图像if (image.empty()) {std::cerr << "无法加载图像" << std::endl;return -1;}// 应用Scharr滤波器,水平方向(dx=1, dy=0)和垂直方向(dx=0, dy=1)cv::Mat scharrX, scharrY;cv::Scharr(image, scharrX, CV_16S, 1, 0); // 1表示水平边缘检测cv::Scharr(image, scharrY, CV_16S, 0, 1); // 1表示垂直边缘检测// 将结果转换为正数,Scharr滤波器的输出通常是带有正负值的图像,为了进一步处理,通常需要将结果转换为正数。您可以使用cv::convertScaleAbs函数来实现这一点cv::Mat scharrAbsX, scharrAbsY;cv::convertScaleAbs(scharrX, scharrAbsX);cv::convertScaleAbs(scharrY, scharrAbsY);// 合并水平和垂直边缘检测结果,在不同方向上应用了Scharr滤波器,您可以合并结果以获得全方向的特征图像cv::Mat scharrEdges;cv::addWeighted(scharrAbsX, 0.5, scharrAbsY, 0.5, 0, scharrEdges);// 显示结果cv::imshow("原始图像", image);cv::imshow("Scharr边缘检测", scharrEdges);cv::waitKey(0);return 0;
}

在这里插入图片描述

使用相机Scharr滤波器实时处理图像以检测边缘

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>int kernelSize = 1; // 初始内核大小// 回调函数,用于处理滑动块的变化
void onTrackbar(int kSize, void* userData) {kernelSize = kSize;
}int main() {cv::VideoCapture cap(0); // 打开本地相机(通常是0号摄像头)if (!cap.isOpened()) {std::cerr << "无法打开相机" << std::endl;return -1;}cv::namedWindow("Scharr滤波器");// 创建一个滑动块来调整内核大小cv::createTrackbar("内核大小", "Scharr滤波器", &kernelSize, 5, onTrackbar);while (true) {cv::Mat frame;cap >> frame; // 从相机捕获一帧图像// 转换为灰度图像cv::Mat grayImage;cv::cvtColor(frame, grayImage, cv::COLOR_BGR2GRAY);// 应用Scharr滤波器cv::Mat scharrX, scharrY;cv::Scharr(grayImage, scharrX, CV_16S, 1, 0, kernelSize);cv::Scharr(grayImage, scharrY, CV_16S, 0, 1, kernelSize);// 将结果转换为正数cv::Mat scharrAbsX, scharrAbsY;cv::convertScaleAbs(scharrX, scharrAbsX);cv::convertScaleAbs(scharrY, scharrAbsY);// 合并水平和垂直Scharr滤波器结果cv::Mat scharrEdges;cv::addWeighted(scharrAbsX, 0.5, scharrAbsY, 0.5, 0, scharrEdges);// 显示结果cv::imshow("Scharr滤波器", scharrEdges);// 等待用户按下ESC键,然后退出循环if (cv::waitKey(1) == 27) {break;}}return 0;
}

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

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

相关文章

【C语言】对文件的输入输出

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C语言初步学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读1. 什么是文件1.1 程序文件1.2 数据文件1.3 数据流1.4 文件名 2. 文件的分类3. 文件缓冲区4. 文件的打开和关闭4.1 文…

STM32使用HAL库驱动TA6932数码管驱动芯片

TA6932介绍 8段16位&#xff0c;支持共阴共阳LED数码管。 2、STM32CUBEMX配置引脚 推挽配置即可。 3、头文件 /******************************************************************************************** * TA6932&#xff1a;8段16位数码管驱动 *******************…

【MySQL入门到精通-黑马程序员】MySQL基础篇-DCL

文章目录 前言一、DCL-介绍二、DCL-管理用户二、DCL-权限控制总结 前言 本专栏文章为观看黑马程序员《MySQL入门到精通》所做笔记&#xff0c;课程地址在这。如有侵权&#xff0c;立即删除。 一、DCL-介绍 DCL英文全称是Data Control Language&#xff08;数据控制语言&#x…

C语言,标志法

标志法通常用来检查或者进行过程中一些状态变化。 有一些是为了观察变化&#xff0c;举出一些以往代码的例子&#xff1a; 1.找出一串数字中没有重复出现过的数字 #include <stdio.h> int main() {int arr[1000] { 0 };int n 0;scanf("%d", &n);int i…

计算机竞赛 题目:基于深度学习的中文汉字识别 - 深度学习 卷积神经网络 机器视觉 OCR

文章目录 0 简介1 数据集合2 网络构建3 模型训练4 模型性能评估5 文字预测6 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的中文汉字识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &a…

RabbitMQ消息中间件概述

1.什么是RabbitMQ RabbitMQ是一个由erlang开发的AMQP&#xff08;Advanced Message Queue &#xff09;的开源实现。AMQP 的出现其实也是应了广大人民群众的需求&#xff0c;虽然在同步消息通讯的世界里有很多公开标准&#xff08;如 COBAR的 IIOP &#xff0c;或者是 SOAP 等&…

Newman基本使用

目录 简介 安装 使用 官网 运行 输出测试报告文件 htmlextra 使用 简介 Newman 是 Postman 推出的一个 nodejs 库&#xff0c;直接来说就是 Postman 的json文件可以在命令行执行的插件。   Newman 可以方便地运行和测试集合&#xff0c;并用之构造接口自动化测试和持续集成…

Go If流程控制与快乐路径原则

Go if流程控制与快乐路径原则 文章目录 Go if流程控制与快乐路径原则一、流程控制基本介绍二、if 语句2.1 if 语句介绍2.2 单分支结构的 if 语句形式2.3 Go 的 if 语句的特点2.3.1 分支代码块左大括号与if同行2.3.2 条件表达式不需要括号 三、操作符3.1 逻辑操作符3.2 操作符的…

Halcon我的基础教程(一)(我的菜鸟教程笔记)-halcon仿射变换(Affine Transformation)的探究与学习

目录 什么是仿射变换?仿射变换有哪些方式?任何仿射变换都能由以下基本变换构造而来:在Halocn中,仿射变换具有重要的作用,那我们本文章重点讨论仿射变换基础性知识。 使用Halcon中的重要算子,仿射变换一般解决步骤,案例应用会在以后的文章中我们重点解答与讨论。 我们首先…

从0开始学Java:Java概述

文章目录 1. JavaSE体系介绍2. 计算机语言介绍3. Java语言概述3.1 Java生态圈3.2 Java语言发展历史3.3 Java技术体系平台3.4 Java的主要应用领域3.5 Java语言的特点 4. Java语言跨平台原理 1. JavaSE体系介绍 JavaSE知识模块介绍 第一部分&#xff1a;计算机编程语言核心结构&…

微信小程序wxml使用过滤器

微信小程序wxml使用过滤器 1. 新建wxs2. 引用和使用 如何在微信小程序wxml使用过滤器&#xff1f; 犹如Angular使用pipe管道这样子方便&#xff0c;用的最多就是时间格式化。 下面是实现时间格式化的方法和步骤&#xff1a; 1. 新建wxs 插入代码&#xff1a; /*** 管道过滤工…

docker应用记录总结

一、前言 docker这类部署工具&#xff0c;久而久之不使用非常容易忘记&#xff0c;甚至连操作命令都容易忘记。网上也有比较全的docker使用教程。这里做一个记录总结&#xff0c;纯属是温故知新。 二、docker部署应用 1、docker印象 docker首先让我想到的是是虚拟化技术&…