【OpenCV学习】第15课:处理卷积边缘问题

news2024/11/13 16:37:58

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

(卷积的概念可以看看第14课)

理论

  1. 卷积边缘问题:从下图最右方的结果可以看出,卷积操作之后, 剩余的绿色像素部分, 我们是没有处理到的
    在这里插入图片描述
  2. 那么如何处理这个问题呢:
    在卷积开始之前,增加边缘像素, 填充的像素值为0 或者RGB黑色, 比如核为3*3,那么就在四周填充一个像素的边缘,这样就确保了像素的边缘被处理, 在卷积处理之后, 再去掉这些添加的边缘就行了。 openCV中有以下几种填充方法:
  • BORDER_DEFAULT:将最近的像素进行映射
  • BORDER_CONSTANT : 填充边缘用指定的像素值
  • BORDER_REPLICATE : 复制原图中边界的行或者列
  • BORDER_WRAP : 用对面的像素来补偿填充

相关API
// 给目标图像设置边框
copyMakeBorder(

  • Mat src, //输入图像
  • Mat dst, //输出图像
  • int top, //边缘长度,一般上下左右都用同一个值
  • int bottom,
  • int left,
  • int right,
  • int borderType, //边缘类型
  • Scalar value //颜色
    )

代码示例

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);

	//单纯只设置边框的图片
	/*int top = (int)(0.05*src.rows);
	int bottom = (int)(0.05*src.rows);
	int left= (int)(0.05*src.cols);
	int right= (int)(0.05*src.cols);
	RNG rng(12345);	//生成随机数
	int borderType = BORDER_DEFAULT;
	int c = 0 ;
	while(true){
		c = waitKey(500);
		if((char)c == 27){	//这里27是指ESC键
			break;
		}
		if((char)c == 'r'){
			borderType = BORDER_REPLICATE;
		}else if((char)c == 'w'){
			borderType = BORDER_WRAP;
		}else if((char)c == 'c'){
			borderType = BORDER_CONSTANT;
		}
		Scalar color = Scalar(rng.uniform(0,255), rng.uniform(0,255), rng.uniform(0,255));
		copyMakeBorder(src, dst, top, bottom, left, right, borderType, color);	//注意这里的color, 只有类型是BORDER_CONSTANT的时候才会生效, 其他的类型它都没啥用
		imshow("Border Demo", dst);
	}*/

	// 使用边框处理过后的图片, 再进行高斯模糊
 	Mat GaussianDst;
	GaussianBlur(src, GaussianDst, Size(5,5), 0 , 0, BORDER_DEFAULT); //四种类型切换,效果就不截图了,因为区别太小了, 大家可以自己试试, 不处理边框就高斯模糊, 还有处理边框之后再进行高斯模糊, 两者的区别
	imshow("GaussianBlur Image",GaussianDst);

	waitKey(0);
	return 0;
}

效果截图:

BORDER_DEFAULT效果:
在这里插入图片描述
BORDER_REPLICATE效果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/e918100b690444168a0afc4d69084d3e.png

BORDER_WRAP效果:
在这里插入图片描述

BORDER_CONSTANT:
在这里插入图片描述

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

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

相关文章

论文3:查找文献在指定期刊的引用格式

文章目录说明:1.谷歌学术搜索(可以用一些国内的镜像),并点击被引用次数2.勾选在引用文章中搜索,并在搜索框搜索指定期刊的关键词3.这里指定期刊是RAL即IEEE Robotics and Automation Letters4.任意点开上图中的一篇文章…

支付宝当面付网站对接支付教程

有很多人会开支付宝当面付但是不会配置它老会出现一下情况 第二种情况如下: 如果遇到以上情况可以按照我的步骤就可以解决 详细步骤: 一、应用APPID获取方法 1.打开网站:https://openhome.alipay.com/platform/developerIndex.htm&#x…

Canal配置多个实例以及将Mysql指定表的binlog导入指定的Kafka的Topic

Canal配置多个实例以及将Mysql指定表的binlog导入指定的Kafka的Topic 进入Canal的conf目录 复制模板配置文件 cp -r example/ Ordercp -r example/ Orderdetail修改canal.propertieswenjain vim canal.properties修改内容如下,指定输出模式为kafka canal.serverM…

【元胞自动机】心房颤动/扑动模型研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

(附源码)ssm学校疫情服务平台 毕业设计 291202

ssm学校疫情服务平台 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对学校疫情服务平台等问…

【数电实验】触发器及其应用

实验三 触发器及其应用 一 实验目的 1 了解触发器的触发方式(上升沿触发、下降沿出发)及其触发特点; 2 测试常用触发器的逻辑功能; 3 掌握用触发器设计同步时序逻辑电路的方法。 二 实验内容 1 测试双D触发器74HC74的逻辑功能…

手工编译konsole备忘

背景 系统自带的终端弱爆了,本来想编译深度终端的,但DTK风格的程序在非DDE桌面(应该是dde_kwin这个窗管的问题)巨难看,无意中添加了Konsole,发现已经有我需要使用的右键打开当前目录文件管理器的功能。 …

Go context.Context的学习

一、前言 Golang context是Golang应用开发常用的并发控制技术,它与WaitGroup最大的不同点是context对于派生goroutine有更强的控制力,它可以控制多级的goroutine。 context翻译成中文是”上下文”,即它可以控制一组呈树状结构的goroutine&a…

java计算机毕业设计ssm疫情期间校园车辆入校预约管理服务系统1171a(附源码、数据库)

java计算机毕业设计ssm疫情期间校园车辆入校预约管理服务系统1171a(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe…

没有二十年功力,写不出 Thread.sleep(0) 这一行“看似无用”的代码

这篇文章要从一个奇怪的注释说起,就是下面这张图: 我们可以不用管具体的代码逻辑,只是单单看这个 for 循环。 在循环里面,专门有个变量 j,来记录当前循环次数。 第一次循环以及往后每 1000 次循环之后,进…

ssm+vue基本微信小程序的校园二手商城系统 计算机毕业设计

在当今社会的高速发展过程中,产生的劳动力越来越大,提高人们的生活水平和质量,尤其计算机科技的进步,数据和信息以人兴化为本的目的,给人们提供优质的服务,其中网上购买二手商品尤其突出,使我们…

211大数据专业大四学生,放弃字节转正,选择老家大型国企,听听他怎么说?...

点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接,进入高质量学习交流群今日更新| 1052个转型案例分享-大数据交流群分享学习群一位大数据专业同学的秋招学习和求职经历,他是211大四学生,年初才开始学习,但还好赶…

181.基于Django的云文件存储使用方式——七牛云存储

1.文件云存储 1.1 概述 在Django项目中,用户上传的文件以及项目中使用的静态文件,默认读书存储本地,保存在服务器中,但是,其实我们也可以将他们保存在云存储中,譬如七牛云存储、阿里云存储、亚马逊云存储…

【网络安全】提防黑客来“敲门”

前言 互联网在给我们带来便捷高效的同时,也给一些不法分子提供了可乘之机。网络诈骗、窃取个人信息等花样层出不穷,骚扰电话、垃圾短信扰乱着我们的正常生活,使网络空间抹上一笔灰色。网络安全与每个人都息息相关,所以我们必须理…

Python测试进阶(三)

文章目录性能测试JMeter测试计划模拟并发结果分析分布式性能监控grafanaFluxPrometheus小结性能测试 为什么做性能测试?主要是解决这些问题 什么是性能测试 模拟多个用户的操作,看对服务器性能的影响 指标 TPS:transaction per secondRT&…

基于Kubeadm快速部署一个K8s集群

目录kubeadm概述安装要求准备环境安装kubelet、kubeadm、kubectl使用kubeadm引导集群下载各个机器需要的镜像初始化主节点安装网络组件常用shell命令测试kubernetes集群部署dashboardkubeadm概述 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通…

索引创建、删除的sql语句

目录 创建索引 使用ALTER TABLE 语句创建索引 使用CREATE TABLE 语句创建索引 删除索引 使用ALTER TABLE 语句删除索引 使用DROP INDEX 语句删除索引 创建索引 1、创建表的同时,指定给某个字段创建索引(name) create table cat(id …

SaaS 产品的文档策略

作者:Vaijayanti Nerkar 和 Priya Shetye,BMC Software 几年前,当 BMC Software 决定进军 SaaS 市场时,该公司开始投资开发基于云的产品。20多年来,BMC Software 产品都是典型的本地产品,因此,…

2022.12.11-YOLOv5使用NCNN将模型部署到Android端教程(1)部署自己的训练模型到Android实现静态图片检测

文章目录1. 前言2. 模型转换2.1. NCNN2.1.1. 简介2.1.2. ncnn2.1.3. ncnn-android-yolov52.2. 项目准备2.2.1. 安装Android studio2.2.2. 下载解压源码2.3. 安卓源码重新编译2.3.1. 构建工程2.3.2. 修改源码2.3.2.1. 修改CMakeLists.txt中的路径2.3.2.2. 重新重新ysnc project2…

【华为上机真题 2022】相对开音节

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…