第二周opencv
一、边缘检测算子
边缘检测算子是用于检测图像中物体边界的工具。边缘通常表示图像中灰度值或颜色发生显著变化的地方。边缘检测有助于识别图像中的物体形状、轮廓和结构。这些算子通过分析图像的灰度或颜色梯度来确定图像中的边缘。
梯度算子
要得到一幅图像的梯度,则要求在图像的每个像素点位置处计算偏导数。 一阶微分算子能够检测图像中的亮度变化,因此在边缘位置通常有较大的梯度值。通过检测梯度的变化,可以找到图像中的边缘。
对应的卷积模板
1、Roberts 算子
原理: 基于交叉差分的梯度算法,通过局部差分计算检测边缘线
通过局部差分计算检测边缘线条。常用来处理具有陡峭的低噪声图像,当图像边缘接近于正45度或负45度时,该算法处理效果更理想。其缺点是对边缘的定位不太准确,提取的边缘线条较粗。
import cv2
import numpy as np
import matplotlib.pyplot as pltimage = cv2.imread("../images/1.png", cv2.IMREAD_GRAYSCALE)
# 1.定义 Roberts 算子的卷积核
roberts_x = np.array([[1, 0], [0, -1]], dtype=np.float32)
roberts_y = np.array([[0, 1], [-1, 0]], dtype=np.float32)
# 2.二维卷积操作
# 使用 filter2D 函数应用 Roberts 算子卷积核
gradient_x = cv2.filter2D(image, cv2.CV_64F, roberts_x)
gradient_y = cv2.filter2D(image, cv2.CV_64F, roberts_y)# 3.计算梯度幅值
gradient_magnitude = np.sqrt(gradient_x**2 + gradient_y**2)# 转换结果为8位图像
gradient_magnitude = np.uint8(gradient_magnitude)# 显示原图、Roberts算子的结果和应用结果
plt.subplot(1, 4, 1)
plt.imshow(image, cmap='gray')
plt.title("Original Image")
plt.axis("off")plt.subplot(1, 4, 2)
plt.imshow(gradient_x, cmap='gray')
plt.title("Roberts X")
plt.axis("off")plt.subplot(1, 4, 3)
plt.imshow(gradient_y, cmap='gray')
plt.title("Roberts Y")
plt.axis("off")plt.subplot(1, 4, 4)
plt.imshow(gradient_magnitude, cmap='gray')
plt.title("Magnitude")
plt.axis("off")plt.show()

2、Prewitt 算子
Prewitt算子使用中心差分法计算梯度
相比Roberts 2×2 模板考虑更多的相邻像素,更好地捕捉到图像中的局部变化
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
img = cv2.imread("../images/1.png", cv2.IMREAD_GRAYSCALE)# 1.使用Prewitt算子
kernelx = np.array([[1, 0, -1], [1, 0, -1], [1, 0, -1]], dtype=int)
kernely = np.array([[1, 1, 1], [0, 0, 0], [-1, -1, -1]], dtype=int)
# 2.卷积
gradient_x = cv2.filter2D(img, cv2.CV_64F, kernelx)
gradient_y = cv2.filter2D(img, cv2.CV_64F, kernely)
# 3
# 计算梯度幅值
gradient_magnitude = np.sqrt(gradient_x**2 + gradient_y**2)# 转换结果为8位图像
gradient_magnitude = np.uint8(gradient_magnitude)# 显示原图、水平梯度、垂直梯度、Prewitt算子的结果
plt.subplot(141), plt.imshow(img, cmap='gray'), plt.title('Original Image'), plt.axis('off')
plt.subplot(142), plt.imshow(gradient_x, cmap='gray'), plt.title('X'), plt.axis('off')
plt.subplot(143), plt.imshow(gradient_y, cmap='gray'), plt.title('Y'), plt.axis('off')
plt.subplot(144), plt.imshow(gradient_magnitude, cmap='gray'), plt.title('Prewitt Operator'), plt.axis('off')
plt.show()

3、Laplace
拉普拉斯算子 Laplacian算子是基于二阶导数的边缘检测算子。二阶微分算子主要用于检测图像中的灰度变化的变化率,或者说是梯度的变化率。在边缘处,梯度的变化率最大,因此二阶微分算子会在边缘位置产生较大的响应。
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
img = cv2.imread('../images/1.png', cv2.IMREAD_GRAYSCALE)# 使用拉普拉斯算子
laplacian = cv2.Laplacian(img, cv2.CV_64F)# 转换结果为8位图像
laplacian = np.uint8(np.absolute(laplacian))# 显示原图和拉普拉斯算子的结果
plt.subplot(121), plt.imshow(img, cmap='gray'), plt.title('Original Image'), plt.axis('off')
plt.subplot(122), plt.imshow(laplacian, cmap='gray'), plt.title('Laplacian Operator'), plt.axis('off')
plt.show()

4、Canny算子
Canny基本步骤:
1.去噪:应用高斯滤波来平滑图像
2.找图像的梯度,先将卷积模板分别作用x和y方向,再计算梯度幅值和方向(
)
3.非极大值抑制:保留梯度方向上的局部极大值,细化边缘
4.确定边缘。使用双阈值算法确定最终的边缘信息
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('../images/1.png', cv2.IMREAD_GRAYSCALE)
# 高斯滤波降噪
gaussian = cv2.GaussianBlur(image, (5, 5), 0)
# 使用Canny算子进行边缘检测
edges = cv2.Canny(gaussian, 50, 150) # 50和150是Canny算子的两个阈值,可调整# 显示原始图像和边缘检测结果
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(edges, cmap='gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])plt.show()

5、四种算子的比较


二、角点检测
在角上 不管你把它朝哪个方向移动,像素值都会发生很大变化。

1.Moravec

注:权重函数
当像素位置 (x,y) 位于滑动窗口内时,权重函数为1,否则为0。
E(u,v)越大 越可能是角点
2.harris
在Moravec 基础上 泰勒展开
角点响应函数R
3.Shi-Tomasi
Shi-Tomasi 角点检测改进了Harris角点检测算法的R响应函数,R响应函数更加简单高效。
相关文章:
第二周opencv
一、边缘检测算子 边缘检测算子是用于检测图像中物体边界的工具。边缘通常表示图像中灰度值或颜色发生显著变化的地方。边缘检测有助于识别图像中的物体形状、轮廓和结构。这些算子通过分析图像的灰度或颜色梯度来确定图像中的边缘。 梯度算子 要得到一幅图像的梯度,…...
python_读取txt文件绘制多条曲线II
从给定的列表中来匹配txt文件对应列的数据; import matplotlib.pyplot as plt import re from datetime import datetime from pylab import mplmpl.rcParams["font.sans-serif"] ["SimHei"] # 设置显示中文字体 mpl.rcParams["axes.un…...
java排序简单总结和推荐使用套路(数据排序,结构体排序)
了解int和Integer的区别 int是Java的基本数据类型,用于表示整数值。Integer是int的包装类,它是一个对象,可以包含一个int值并提供一些额外的功能。 Java集合框架中的集合类(如List、Set、Map)只能存储对象,…...
掘根宝典之C语言联合和枚举
联合 C语言中的联合(Union)是一种特殊的数据类型,它允许在同一块内存空间中存储不同类型的数据。 联合与结构体类似,但不同的是,在给联合变量赋值时,它只能存储最后一次赋值的值。 创建联合 在C语言中&…...
【debug】element-ui时间控件回显后不可编辑且显示为空
问题:使用element-ui的时间控件回显数据,编辑数据没有反应:点时间和“确认”按钮都没反应。 输入框中会显示数据,但提交时的校验显示为空。 <el-form-item label"开始时间" prop"limitStartTime"><…...
【Linux从青铜到王者】进程信号
——————————————————————————————————————————— 信号入门 在了解信号之前有许多要理解的相关概念 我们可以先通过一个生活例子来初步认识一下信号 1.生活角度的信号 你在网上买了很多件商品,再等待不同商品快递的到来…...
MyBatis-Plus 快速入门
介绍 jMyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 官网:MyBatis-Plus (baomidou.com) 1.…...
iOS调起高德/百度/腾讯/谷歌/苹果地图并使用GCJ02坐标进行导航
使用演示: 2.地图API相关网站 : 高德:...
HarmonyOS Full SDK的安装
OpenHarmony的应用开发工具HUAWEI DevEco Studio现在随着OpenHarmony版本发布而发布,只能在版本发布说明中下载,例如最新版本的OpenHarmony 4.0 Release。对应的需要下载DevEco Studio 4.0 Release,如下图。 图片 下载Full SDK主要有两种方式,一种是通过DevEco Studio下载…...
小程序嵌套H5-真机突然无法使用
今天测试反馈了一个问题,测试环境的小程序突然就登录不了了。我自己拿手机扫码登录是正常的,用其他同事的手机扫描登录也是正常。 下面是排查的路线: 1、其他环境使用测试手机扫码登录是否正常?(正常) 2、H5地址改为本地IP&#…...
自然语言处理 | 语言模型(LM) 浅析
自然语言处理(NLP)中的语言模型(Language Model, LM)是一种统计模型,它的目标是计算一个给定文本序列的概率分布,即对于任意给定的一段文本序列(单词序列),语言模型能够估…...
全量知识系统问题及SmartChat给出的答复 之13 解析器+DDD+文法型
Q32. DDD的领域概念和知识系统中设计的解析器之间的关系。 那下面,我们回到前面的问题上来。 前面说到了三种语法解析器,分别是 形式语言的(机器或计算机语言)、人工语言的和自然语言的。再前面,我们聊到了DDD设计思…...
华中某科技大学校园网疑似dns劫持的解决方法
问题 在校园网ping xxx.ddns.net,域名解析失败 使用热点ping xxx.ddns.net,可以ping通 尝试设置windows dns首选dns为114.114.114.114,重新ping,仍然域名解析失败 猜测【校园网可能劫持dns请求】 解决方法 使用加密的dns请求…...
模型部署 - onnx 的导出和分析 -(1) - PyTorch 导出 ONNX - 学习记录
onnx 的导出和分析 一、PyTorch 导出 ONNX 的方法1.1、一个简单的例子 -- 将线性模型转成 onnx1.2、导出多个输出头的模型1.3、导出含有动态维度的模型 二、pytorch 导出 onnx 不成功的时候如何解决2.1、修改 opset 的版本2.2、替换 pytorch 中的算子组合2.3、在 pytorch 登记&…...
【鸿蒙 HarmonyOS 4.0】多设备响应式布局
一、背景 在渲染页面时,需要根据不同屏幕大小渲染出不同的效果,动态的判断设备屏幕大小,便需要采用多设备响应式布局。这种设计方法能够动态适配各种屏幕大小,确保网站在不同设备上都能呈现出最佳的效果。 二、媒体查询…...
Android ANR 日志分析定位
ANR 是 Android 应用程序中的 "Application Not Responding" 的缩写,中文意思是 "应用程序无响应"。这是当应用程序在 Android 系统上运行时,由于某种原因不能及时响应用户输入事件或执行一个操作,导致界面无法更新&…...
Optional 详解
Optional 详解 1、Optional 介绍2、创建 Optional 对象3、Optional 常用方法1. 判断值是否存在 — isPresent()2. 非空表达式 — ifPresent()3. 设置(获取)默认值 — orElse()、orElseGet()4. 获取值 — get()5. 过滤值 — filter()6. 转换值 — map() 作为一名 Java 程序员&am…...
(科目三)数据库基础知识
1、基本概念 1.1 数据库 1、数据、信息和数据处理 数据是指表达信息的某种物理符号; 信息是对客观事物的反映,是为某一特定目的二提供的决策数据; 数据处理是指将数据转换成信息的过程,是对各类型的数据进行收集、整理、存储、…...
Unity性能优化篇(十) 模型优化之网格合并 Easy Mesh Combine Tool插件使用以及代码实现网格合并
把多个模型的网格合并为一个网格。可以使用自己写代码,使用Unity自带的CombineMeshes方法,也可以使用资源商店的插件,在资源商店搜Mesh Combine可以搜索到相关的插件,例如Easy Mesh Combine Tool等插件。 可大幅度减少Batches数量…...
0.8秒一张图40hx矿卡stable diffusion webui 高质极速出图组合(24.3.3)
新消息是。经过三个月的等待,SD Webui (automatic1111)终于推出了新版本1.8.0,本次版本最大的更新,可能就是pytorch更新到2.1.2, 不过还是晚了pytorch 2.2.2版。 不过这版的一些更新,在forget分支上早就实现了,所以。…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...














