python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)边缘检测
OpenCV中边缘检测四种常用算子:
(1)Sobel算子
Sobel算子是一种基于梯度的边缘检测算法。它通过对图像进行卷积操作来计算图像的梯度,并将梯度的大小作为边缘的强度。它使用两个3x3的卷积核,分别用于计算水平方向(Gx)和垂直方向(Gy)的梯度,通过对两个方向的梯度进行合并来得到最终的边缘图像。

import cv2image0 = cv2.imread('output.png') # 读入图像
cv2.imshow('wino',image0) # 展示原图像# 对x方向进行边缘检测,dx=1表示对x方向,dy=0表示不对y轴方向,参数-1表示输出图像将使用与输入图像相同的数据类型来存储像素值
# x方向的边缘
sobelx = cv2.Sobel(image0,-1,dx=1,dy=0)
cv2.imshow("win1",sobelx)# x方向的边缘,包括负数信息,因为图像的灰度值范围为0~255,负数展示不出来
# cv2.CV_64F表示将默认的uint8数据类型改为float64
sobelx64 = cv2.Sobel(image0,cv2.CV_64F,dx=1,dy=0)
cv2.imshow("win2",sobelx64)# x方向的边缘,包括负数信息, 使用convertScaleAbs将灰度值进行绝对值处理,负值信息即可显示
sobelxfull = cv2.convertScaleAbs(sobelx64)
cv2.imshow('win3',sobelxfull)# x方向不检测,y轴方向检测
sobely = cv2.Sobel(image0,-1,dx=0,dy=1)
cv2.imshow("win4",sobely)# y方向的边缘,包括负数信息
sobely64 = cv2.Sobel(image0,cv2.CV_64F,dx=0,dy=1)
sobelyfull = cv2.convertScaleAbs(sobely64)
cv2.imshow("win5",sobelyfull)# x和y方向进行加权处理
yuan_xy_full = cv2.addWeighted(sobelxfull,1,sobelyfull,1,0)
cv2.imshow('sobely',yuan_xy_full)
cv2.waitKey(0)

(2)Scharr 算子
Scharr算子是一种改进的Sobel算子,它使用更复杂的权重来提高梯度计算的精确度,尤其是在低对比度边缘上。与 Soble 的速度相同,且精度更高。Scharr 算子与 Sobel 算子的不同点是在平滑部分,其中心元素占的权重更重,相当于使用较小标准差的高斯函数,也就是更瘦高的模板。ksize参数表示卷积核的大小。它是一个正奇数,用于指定卷积核的尺寸。

import cv2
image0 = cv2.imread('output.png',cv2.IMREAD_GRAYSCALE) # 导入图像灰度图形式
cv2.imshow('image0',image0)x64 = cv2.Scharr(image0,cv2.CV_64F,dx=1,dy=0) # 对x方向进行处理,将数据类型保存并转换成浮点型
xfull = cv2.convertScaleAbs(x64) # 转换为绝对值,负数转换为正数y64 = cv2.Scharr(image0,cv2.CV_64F,dx=0,dy=1) # 对y轴方向进行处理
yfull = cv2.convertScaleAbs(y64) # 绝对值处理xysobel = cv2.addWeighted(xfull,1,yfull,1,0) # 加权处理
cv2.imshow('xy_Scharr',xysobel)
cv2.waitKey(0)

(3)Canny边缘检测算法
Canny算法是一种多阶段的边缘检测技术,以其高效性和准确度而受到广泛应用。它通过噪声滤波、梯度计算、非极大值抑制和双阈值等步骤来识别边缘。Canny算法能够提取高质量的边缘,并且对噪声有一定的抵抗能力。
-
步骤:
- 高斯滤波:使用高斯滤波器平滑图像以减少噪声。
- 梯度计算:使用Sobel算子计算梯度的强度和方向。
- 非极大值抑制:抑制非边缘的像素,仅保留局部最大值。
- 双阈值检测:应用高、低两个阈值以确定边缘。
- 边缘连接:通过连接在高阈值附近的低阈值像素来形成最终边缘。
-
输出:生成清晰的边缘图。
import cv2
import numpy as npimage1 = cv2.imread('output.png',cv2.IMREAD_GRAYSCALE)
cv2.imshow('image1',image1)# 高斯平滑
blurred = cv2.GaussianBlur(image1, (5, 5), 1.5)# 参数:其后表示边缘检测的像素值低于100像素的被丢弃,高于150像素的被丢弃
image1_canny = cv2.Canny(image1,100,150)
cv2.imshow('canny',image1_canny)
cv2.waitKey(0)

(4)Laplacian算子
Laplacian算子是一种基于二阶导数的边缘检测算法。它通过计算图像的二阶导数来查找图像中的边缘。Laplacian算子对于边缘的宽度和方向不敏感,因此可以检测出比较粗的边缘。它对噪声相对敏感,通常需要在使用前进行平滑处理。

使用拉普拉斯算子实现彩色浮雕效果
import cv2
import numpy as np'''
使用拉普拉斯算子实现彩色浮雕效果原理
1灰度转换:首先,将彩色图像转换为灰度图像。范围通常为0到255。2灰度差异计算:
对于灰度图像中的每个像素,计算其与相邻像素的灰度差异。
这通常是通过将当前像素的灰度值与其相邻像素(如水平相邻、垂直相邻或对角线相邻)的灰度值进行相减来实现的。
这种差异反映了图像中的边缘和轮廓信息。3偏移调整:
将计算得到的灰度差异加上一个偏移值。这个偏移值用于控制浮雕效果的强度和方向。
通过调整偏移值,可以使浮雕效果更加明显或柔和。选择一个适当的偏移值(如128),这样可以使处理后的图像灰度值保持在合理的范围内。4灰度范围映射:
将计算得到的灰度值映射到合适的灰度范围(通常是0到255)。归一化。
这确保了浮雕效果的结果是一个合法的灰度图像。如果灰度值超出了这个范围,则需要进行裁剪或归一化处理。'''
def emboss_effect_laplacian(image):if image is None:print("Error: Unable to read image.")return# 消除小噪声denoise = cv2.medianBlur(image, 3)# 使用拉普拉斯算子计算二阶导数laplacian = cv2.Laplacian(denoise, cv2.CV_64F)# 将拉普拉斯的值放大来模拟光照效果emboss = cv2.convertScaleAbs(laplacian * 2 + 128) # 偏移量128是为了使值分布更均匀return emboss
if __name__ == '__main__':original = cv2.imread("f:/apple.jpg", cv2.IMREAD_COLOR)emboss = emboss_effect_laplacian(original)result = np.concatenate((original, emboss), axis=1)# 显示原始图像和浮雕效果图像cv2.imshow('Original Image', original)cv2.imshow('Emboss Effect (Laplacian)', emboss)cv2.imwrite("emboss-result.jpg", result)cv2.waitKey(0)cv2.destroyAllWindows()

相关文章:
python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)边缘检测
OpenCV中边缘检测四种常用算子: (1)Sobel算子 Sobel算子是一种基于梯度的边缘检测算法。它通过对图像进行卷积操作来计算图像的梯度,并将梯度的大小作为边缘的强度。它使用两个3x3的卷积核,分别用于计…...
SSM课设-学生管理系统
【课设者】SSM课设-学生管理系统 技术栈: 后端: SpringSpringMVCMybatisMySQLJSP 前端: HtmlCssJavaScriptEasyUIAjax 功能: 学生端: 登陆 学生信息管理 个人信息管理 老师端: 多了教师信息管理 管理员端: 多了班级信息管理 多了年级信息管理 多了系统用户管理...
【Pytorch实用教程】TCN(Temporal Convolutional Network,时序卷积网络)简介
文章目录 TCN的基本特点TCN的优点TCN的应用场景典型的TCN架构总结TCN(Temporal Convolutional Network,时序卷积网络)是一种用于处理序列数据的深度学习模型,尤其适用于时间序列预测、语音识别、自然语言处理等任务。它利用卷积神经网络(CNN)来处理时序数据,相比于传统的…...
网络安全 | 什么是正向代理和反向代理?
关注:CodingTechWork 引言 在现代网络架构中,代理服务器扮演着重要的角色。它们在客户端和服务器之间充当中介,帮助管理、保护和优化数据流。根据代理的工作方向和用途,代理服务器可分为正向代理和反向代理。本文将深入探讨这两种…...
3 前端(中):JavaScript
文章目录 前言:JavaScript简介一、ECMAscript(JavaScript基本语法)1 JavaScript与html结合方式(快速入门)2 基本知识(1)JavaScript注释(和Java注释一样)(2&am…...
VIT论文阅读与理解
transform网络结构 vision transform网络结构 图1:模型概述。我们将图像分割成固定大小的补丁,线性嵌入每个补丁,添加位置嵌入,并将结果向量序列馈送到标准Transformer编码器。为了执行分类,我们使用标准方法向序列中添…...
JavaScript笔记APIs篇01——DOM获取与属性操作
黑马程序员视频地址:黑马程序员前端JavaScript入门到精通全套视频教程https://www.bilibili.com/video/BV1Y84y1L7Nn?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p78https://www.bilibili.com/video/BV1Y84y1L7Nn?…...
SQL表间关联查询详解
简介 本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(left join)、右连接(right join)、全连接(full join)、内连接(inner join)、交叉连接&…...
select函数
系统调用 select()可用于执行 I/O 多路复用操作,调用 select()会一直阻塞,直到某一个或多个文件描述符成为就绪态(可以读或写)。其函数原型如下所示: #include <sys/select.h> int select(int nfds, fd_set *re…...
建造者模式(或者称为生成器(构建器)模式)
一、什么是建造者模式? 将复杂对象的构建与表示进行分离,使得统一的构建过程,可以创建出不同的对象表现模式 就是将复杂对象里面的成员变量,设置不同的值,使得生成出来的对象拥有不同的属性值; 二、特点…...
【深度学习】Huber Loss详解
文章目录 1. Huber Loss 原理详解2. Pytorch 代码详解3.与 MSELoss、MAELoss 区别及各自优缺点3.1 MSELoss 均方误差损失3.2 MAELoss 平均绝对误差损失3.3 Huber Loss 4. 总结4.1 优化平滑4.2 梯度较好4.3 为什么说 MSE 是平滑的 1. Huber Loss 原理详解 Huber Loss 是一种结合…...
A5.Springboot-LLama3.2服务自动化构建(二)——Jenkins流水线构建配置初始化设置
下面我们接着上一篇文章《A4.Springboot-LLama3.2服务自动化构建(一)——构建docker镜像配置》继续往下分析,在自动化流水线构建过程当中的相关初始化设置和脚本编写。 一、首先需要先安装Jenkins 主部分请参考我前面写的一篇文章《Jenkins持续集成与交付安装配置》 二、…...
李宏毅机器学习HW1: COVID-19 Cases Prediction
Kaggle数据集和提交链接 特征选择(主要修改地方) 在sample code的基础上主要修改了Select_feat选择特征函数。 首先,因为数据集中的第一列是id,先在raw_x_train,raw_x_valid,raw_x_test中都去掉这一列。其…...
MySQL下载安装DataGrip可视化工具
目录 WinMySQL下载安装步骤MySQL配置添加环境变量 Mac下载安装配置环境变量 DataGrip可视化工具以Win为例了。Mac忘记截图了。步骤都一样 Win MySQL下载 官网: https://www.mysql.com/ 直接进下载界面: https://downloads.mysql.com/archives/installe…...
多平台下Informatica在医疗数据抽取中的应用
一、引言 1.医疗数据抽取与 Informatica 概述 1.1 医疗数据的特点与来源 1.1.1 数据特点 医疗数据具有显著的多样性特点。从数据类型来看,涵盖了结构化数据,如患者的基本信息、检验检查结果等,这些数据通常以表格形式存储,便于…...
用公网服务器实现内网穿透
首先需要一个公网服务器 下载frp 搜索github下载到frp,服务端frps/客户端frpc。。下载的时候要注意自己本地内网机的cpu版本和服务端cpu架构 我的电脑是mac M1PRO版本 下载的是:darwinarm64 比如 服务端一般是Linux(Intel 64位CPU…...
为什么mysql更改表结构时,varchar超过255会锁表
在 MySQL 中,当修改表结构并将 VARCHAR 字段的长度设置为超过 255 时,可能会出现锁表的情况。这与 MySQL 的存储引擎(主要是 InnoDB)以及表的底层存储方式相关。 原因分析 行格式变化 InnoDB 存储引擎支持多种行格式(…...
ASP.NET Core中 JWT 实现无感刷新Token
在 Web 应用开发中,用户登录状态的管理至关重要。为了避免用户频繁遇到登录过期的问题,我们可以通过实现 JWT(JSON Web Token)刷新机制来提升用户体验 推荐: 使用 Refresh Token(双 Token 机制) 1. 生成和…...
函数(函数的概念、库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、函数的声明和定义、static和extern)
一、函数的概念 •C语⾔中的函数:⼀个完成某项特定的任务的⼀⼩段代码 •函数又被翻译为子函数(更准确) •在C语⾔中我们⼀般会⻅到两类函数:库函数 ⾃定义函数 二、库函数 1 .标准库和头文件 •C语⾔的国际标准ANSIC规定了⼀…...
物联网在烟草行业的应用
物联网技术在烟草行业的应用 物联网技术在烟草行业的应用主要体现在以下几个方面: 智能制造 :物联网技术可以实现对生产过程中的关键参数进行实时监测,确保产品的质量稳定可靠。同时,通过对设备的远程维护和故障诊断,…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架
1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...
