【OpenCV学习】第14课:边缘检测与自定义线性滤波(卷积, Rebert算子, Sobel算子, 拉普拉斯算子)

news2024/11/14 15:25:16

仅自学做笔记用,后续有错误会更改

参考文章:http://t.zoukankan.com/whw1314-p-12007928.html

理论

  1. 卷积的概念:
    在这里插入图片描述

  2. 在图像上使用卷积的目的:模糊图像, 提取边缘轮廓, 图像锐化等

  3. 卷积如何工作:
    在这里插入图片描述
    下边给出一个均值滤波(卷积的一种)的图例:
    在这里插入图片描述
    在这里插入图片描述

  4. 常见的卷积算子(kernel, 核), 这些算子在边缘提取中都经常用到
    在这里插入图片描述

  • 注1:拉普拉斯算子(0, -1, 0, -1, 4, -1, 0, -1, 0)是边缘提取,锐化算子(0, -1, 0, -1, 5, -1, 0, -1, 0)是边缘锐化,两个算子很相似, 但是结果相差极大
  • 注2:Sobel算子的边缘提取效果比较强烈

相关API
filter2D( src, dst, depth, kernel, anchor, detal, borderType )

  • src: 原图像
  • dst: 目标图像
  • depth: 目标图像深度,填-1就是程序自动识别图像深度
  • kernel:卷积的核
  • anchor:核的锚点,指示内核中过滤点的相对位置, 锚应位于内核中, 默认值(-1,-1)表示锚位于内核中心
  • detal:在将它们存储在dst中之前,将可选值添加到已过滤的像素中, 就是个偏移量
  • boderType:像素外推法,参见BorderTypes

代码示例

using namespace cv;
int main(int argc, char** argv){
	Mat src,dst;
	int ksize = 0;
	src = imread(...);
	if( !src.data ){
		return -1;
	}
	char INPUT_WIN[] = "input image";
	namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
	imshow(INPUT_WIN, src);

	// 边缘提取:Rebert X方向
	Mat rebert_x_Image;
	Mat rebert_x = (Mat_<int>(2,2) << 1, 0, 0, -1);
	filter2D(src, rebert_x_Image, -1, rebert_x, Point(-1, -1), 0.0);
	// 边缘提取:Rebert Y方向
	Mat rebert_y_Image;
	Mat rebert_y = (Mat_<int>(2,2) << 0, 1, -1, 0);
	filter2D(src, rebert_y_Image, -1, rebert_y, Point(-1, -1), 0.0);
	imshow("Rebert X",rebert_x_Image);
	imshow("Rebert Y",rebert_y_Image);
	
	//边缘提取:Sobel X方向
	Mat sobel_x_Image;
	Mat sobel_x = (Mat_<int>(3,3) << -1, 0, 1, -2, 0 ,2, -1, 0, 1);
	filter2D(src, sobel_x_Image, -1, sobel_x , Point(-1, -1), 0.0);
	//边缘提取:Sobel Y方向
	Mat sobel_y_Image;
	Mat sobel_y = (Mat_<int>(3,3) << -1, -2, -1, 0, 0 ,0, 1, 2, 1);
	filter2D(src, sobel_y_Image, -1, sobel_y , Point(-1, -1), 0.0);
	imshow("Sobel X",sobel_x_Image);
	imshow("Sobel Y",sobel_y_Image);

	//边缘提取:拉普拉斯算子
	Mat laplacian_Image;
	Mat laplaian_kernel = (Mat_<int>(3,3) << 0, -1, 0, -1, 4, -1, 0, -1, 0);
	filter2D(src, laplacian_Image, -1, laplaian_kernel, Point(-1, -1), 0.0);
	imshow("Laplacian",laplacian_Image);

	// 自定义卷积模糊, 以下代码实现每隔半秒就变换模糊程度,一直重复循环的过程
	int c = 0;
	int index = 0 ;
	while(true){
		c = waitKey(500);
		if( (char)c == 27){ 	//这里的27是ESC键
			break;
		}
		ksize = 4 + (index % 5) * 2 + 1;
		//Mat::ones()创建一个全是1的核, 后边再除以的ksize*ksize, 意思就是:假如ksize为5, 那么生成的核里面全都是1/5*5
		Mat custom_kernel = Mat::ones(Size(ksize,ksize), CV_32F) / (float)(ksize * ksize);
		filter2D(src, dst, -1, custom_kernel , Point(-1, -1));
		index++;
		imshow("custom image", dst);
	}

	waitKey(0);
	return 0;
}

效果截图:
Rebert算子(分别X丶Y两个方向提取)边缘提取效果:
在这里插入图片描述
Sobel算子(分别X丶Y两个方向提取)边缘提取效果:
在这里插入图片描述
拉普拉斯算子边缘提取效果:
在这里插入图片描述
自定义卷积模糊效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

MATLB|基于燃料电池混合动力汽车双层凸优化

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…

算法基础篇-01-时间复杂度和空间复杂度

1. 用什么表示算法的运行快慢&#xff1f; n 代表是算法里面的问题规模&#xff0c;n越大&#xff0c;运算越慢&#xff0c;比如n1和n100肯定是不一样的&#xff1b;机器不一样&#xff0c;相同的算法代码运行所消耗的时间也不一样&#xff1b; 2. 借用生活中的案例 类比生活中…

[附源码]Python计算机毕业设计SSM基于的校园卡管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

鸿蒙开发初体验以及遇到的几点坑

今天尝试了一下鸿蒙开发&#xff0c;有一些经验跟大家进行分享。建议大家先看完我的文章&#xff0c;再去尝试鸿蒙。 我安装好了开发工具&#xff0c;并且跑通了Hello World程序。同时&#xff0c;我还跑通了小鸿网课Java版本项目&#xff1a; 感觉&#xff0c;还好吧… 操作…

[附源码]Python计算机毕业设计SSM基于的小型房屋租赁平台(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

WordPress后台添加顶级菜单add_menu_page()函数的用法及实例代码

WordPress后台管理页面包括文章、多媒体、链接、页面、评论、外观、插件......等等主菜单选项&#xff0c;我们在开发主题和插件的时候经常需要在后台添加菜单。 目录 一、WordPress后台添加顶级菜单 概述 一、add_menu_page()函数介绍 三、参数详解 四、Wordpress默认菜…

零基础怎么入门Python?

“零基础可以学习Python吗&#xff1f;” 这是很多初学者经常问的一个问题&#xff0c;我的回答是可以&#xff01; 现在很多小学、初中也开始学习编程语言&#xff0c;选择的入门语言就是Python。 Python其实和学中文没什么区别&#xff0c;学习中文是为了更好的和人沟通&a…

【redis事务】@Transactional对Redis事务起作用(包含redis+lua)

【redis事务】Transactional对Redis事务起作用&#xff08;包含redislua&#xff09;一、前言二、准备三、StringRedisTemplate 开启事务四、关键代码&#xff08;验证Transactional对redis事务是否生效&#xff09;五、关键代码&#xff08;验证Transactional对redislua是否生…

回顾Redis之对象与数据结构

引言 Redis是一款基于键值对的数据结构存储系统&#xff0c;它的特点是基于内存操作、单线程处理命令、IO多路复用模型处理网络请求、键值对存储与简单丰富的数据结构等等 这篇文章主要围绕Redis中的对象与数据结构来详细说明键值对存储与简单丰富的数据结构这两大特点 Redi…

CSS 实现一个3d魔方

前言 &#x1f44f;CSS 实现一个3d魔方&#xff0c;速速来Get吧~ &#x1f947;文末分享源代码。记得点赞关注收藏&#xff01; 1.实现效果 2.实现步骤 魔方的一面为九个圆角正方形&#xff0c;定义正方形的宽高为–w&#xff0c;九个正方形的直接的间距为–gap&#xff0c;…

Spring整合其他技术

Spring整合其他技术 1 Spring整合mybatis 1.1 思路分析 问题导入 mybatis进行数据层操作的核心对象是谁&#xff1f; 1.1.1 MyBatis程序核心对象分析 1.1.2 整合MyBatis 使用SqlSessionFactoryBean封装SqlSessionFactory需要的环境信息 使用MapperScannerConfigurer加载…

安卓玩机搞机技巧综合资源----手机显秒设置 多种方式【十一】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

电子学会2020年9月青少年软件编程(图形化)等级考试试卷(二级)答案解析

目录 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 二、判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 三、编程题【该题由测评师线下评分】&#xff08;共2题&#xff0c;共30分&#xff09; 青少年软件…

软件安全设计(威胁建模实现)

目录 一、实验目的 二、实验软硬件要求 三、实验预习 四、实验内容&#xff08;实验步骤、测试数据等&#xff09; 实验步骤 确定安全目标 创建在线学习系统概况图 分解在线学习系统 确定威胁 威胁评估 确定威胁缓解计划或策略 验证和记录威胁 一、实验目的 熟悉软…

[附源码]JAVA毕业设计医院管理系统(系统+LW)

[附源码]JAVA毕业设计医院管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

Spring Cloud Feign的自定义配置及使用

Feign 提供了很多的扩展机制&#xff0c;让用户可以更加灵活的使用&#xff0c;这节我们来学习 Feign 的一些自定义配置。 日志配置 有时候我们遇到 Bug&#xff0c;比如接口调用失败、参数没收到等问题&#xff0c;或者想看看调用性能&#xff0c;就需要配置 Feign 的日志了…

遥感影像(tif,img)概览/金字塔(overviews)的创建与清除

使用python环境下的gdal进行遥感影像&#xff08;tif&#xff0c;img格式&#xff09;概览&#xff08;overviews&#xff09;的创建与清除&#xff0c;前边是测试过程&#xff0c;结论在最后 过程 问题起因是拿到一批img格式的影像需要转cog&#xff0c;程序运行中报了个错 …

ESXi8.0安装,实体机安装,IPMI远程安装实战笔记

目录 1.前言 2.连接主板IMPI 3.硬件兼容及BIOS设置 4.从U盘安装ESXi ESXi8.0安装包下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1-a3ka1TAScFPtAc29jcxzQ 提取码&#xff1a;qwhg 1.前言 ESXi系列的虚拟机直接以操作系统的形态出现&#xff0c;与基于Li…

【Linux静态库和动态库】

Linux静态库和动态库1. 编译与ELF格式2. 库的基本概念3.静态库的制作&#xff1a;&#xff08;假设要将a.c、b.c制作成静态库&#xff09;4.静态库的常见操作5.静态库的使用6. 多个库的相互依赖举例1.(库文件制作、错误处理)7.静态库和动态库的关系和区别8.动态库的制作软链接 …

ADI Blackfin DSP处理器-BF533的开发详解25:USB接口设计(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 功能介绍 跟网口一样&#xff0c;USB这个设计很勉强&#xff0c;因为BF533并不带USB口&#xff0c;当时是给一个大厂做MP4的方案…