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算法能够提取高质量的边缘,并且对噪声有一定的抵抗能力。

  • 步骤

    1. 高斯滤波:使用高斯滤波器平滑图像以减少噪声。
    2. 梯度计算:使用Sobel算子计算梯度的强度和方向。
    3. 非极大值抑制:抑制非边缘的像素,仅保留局部最大值。
    4. 双阈值检测:应用高、低两个阈值以确定边缘。
    5. 边缘连接:通过连接在高阈值附近的低阈值像素来形成最终边缘。
  • 输出:生成清晰的边缘图。

   

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

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

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

相关文章

[实现Rpc] 环境搭建 | JsonCpp | Mudou库 | callBack()

目录 1. 项目介绍 2. 技术选型 3. 开发环境和环境搭建 Ubuntu-22.04环境搭建 1. 安装 wget(一般情况下默认会自带) 2. 更换国内软件源 ① 备份原始 /etc/apt/sources.list 文件 ② 编辑软件源文件 ③ 更新软件包列表 3. 安装常用工具 3.1 安装…

Golang Gin系列-1:Gin 框架总体概述

本文介绍了Gin框架,探索了它的关键特性,并建立了简单入门的应用程序。在这系列教程里,我们会探索Gin的主要特性,如路由、中间件、数据库集成等,最终能使用Gin框架构建健壮的web应用程序。 总体概述 Gin是Go编程语言的…

Node.js 与 JavaScript 是什么关系

JavaScript 是一种编程语言,而 Node.js 是 JavaScript 的一个运行环境,它们在不同的环境中使用,具有一些共同的语言基础,但也有各自独特的 API 和模块,共同推动着 JavaScript 在前后端开发中的广泛应用。 一、基础语言…

游戏引擎学习第81天

仓库:https://gitee.com/mrxiao_com/2d_game_2 或许我们应该尝试在地面上添加一些绘图 在这段时间的工作中,讨论了如何改进地面渲染的问题。虽然之前并没有专注于渲染部分,因为当时主要的工作重心不在这里,但在实现过程中,发现地…

IO多路复用详解-selectpollepoll

目录 1.IO多路复用概念 2.系统调用函数 2.1select 2.1.1select函数细节 2.2基于select实现并发处理 2.2.1处理流程 2.2.2服务端通信代码 2.2.3客户端通信代码 2.3基于poll函数实现并发处理 2.3.1select与poll函数区别 2.3.2poll函数 2.3.3服务器端代码实现 2.3.4客…

IDEA下载安装

目录 IDEAWin下载安装 Mac下载安装 IDEA中基本配置&注释修改背景主题为白色修改字体大小鼠标滚轮控制字体大小控制字母大小写提示(取消勾选)设置自动编译(打勾)自动保存(参数为1)设定参数提示&#xff…

A Dual-Module Denoising Approach 解读

系列博客目录 文章目录 系列博客目录1.这个GCN有什么用2.GCN是如何增强方面相关的情感表达 1.这个GCN有什么用 在本文中,图卷积网络(GCN)的作用可以总结为以下几点: 建模多模态依赖关系 GCN 利用 加权关联矩阵 (A),将…

复用类(1):组合、继承

复用代码是java众多引人注目的功能之一。但要想成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须能够做更多的事情。 上述方法常为C这类过程型语言所使用,但收效不是很好。正如java中所有事物一样,问题解决…

.Net Core微服务入门全纪录(五)——Ocelot-API网关(下)

系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…

RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集

前面两篇已经交代AI和AENC模块的配置,这篇就让这两个模块绑定起来,绑定的原因是,Aenc从Ai模块拿到采集的原始数据进行编码。 使用 RK_MPI_SYS_Bind 把 AI 节点和 AENC 进行绑定,其中 enModId 是模块 ID 号选择的是 RK_ID_AI、s32C…

2.5G PoE交换机 TL-SE2109P 简单开箱评测,8个2.5G电口+1个10G光口(SFP+)

TPLINK(普联)的万兆上联的2.5G网管交换机TL-SE2109P简单开箱测评。8个PoE 2.5G电口,1个万兆SFP上联口。 2.5G交换机 TL-SE2420 简单开箱评测,16个2.5G电口4个10G光口(SFP):https://blog.zeruns.com/archives/837.html…

若依框架搭建学习

按这位大神的教程一步一步来。我只写注意事项。 https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5OTgxOTg0Ng&actiongetalbum&album_id2441331662295973890&scene173&from_msgid2247483925&from_itemidx1&count3&nolastread1#wechat_redirect…

学成在线_内容管理模块_创建模块工程

学成在线模块工程 1.各个微服务依赖基础工程2.每个微服务都是一个前后端分离的项目3.xuecheng-plus-content:内容管理模块工程xuecheng-plus-content-modelxuecheng-plus-content-servicexuecheng-plus-content-api 1.各个微服务依赖基础工程 2.每个微服务都是一个前…

GCPAAS/DashBoard:完全免费的仪表盘设计,基于Vue+ElementUI+G2Plot+Echarts,开源代码,简单易用!还在等什么呢

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 GCPAAS/DashBoard,一款基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的仪表盘设计器,具备仪表盘目录管理…

登录校验Cookie、Session、JWT

目录 基础知识:登录校验的场景 基础知识:会话 ​编辑方案一:Cookie 方案二:Session 方案三:令牌技术 JWT 令牌 基础知识:登录校验的场景 基础知识:会话 什么是会话?什么是会话跟…

Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin

Android BitmapShader实现狙击瞄具十字交叉线准星&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.…

gitignore忽略已经提交过的

已经在.gitignore文件中添加了过滤规则来忽略bin和obj等文件夹&#xff0c;但这些文件夹仍然出现在提交中&#xff0c;可能是因为这些文件夹在添加.gitignore规则之前已经被提交到Git仓库中了。要解决这个问题&#xff0c;您需要从Git的索引中移除这些文件夹&#xff0c;并确保…

Docker 中安装 Redis 并开启远程访问

在 Docker 中安装 Redis 并开启远程访问&#xff0c;以便本机可以连接的详细步骤&#xff1a; 一、拉取 Redis 镜像 首先&#xff0c;你需要从 Docker Hub 拉取 Redis 的镜像。使用以下命令&#xff1a; bash docker pull redis:latest这将拉取最新版本的 Redis 镜像。如果你…

ABP - 缓存模块(1)

ABP - 缓存模块&#xff08;1&#xff09; 1. 与 .NET Core 缓存的关系和差异2. Abp 缓存的使用2.1 常规使用2.2 非字符串类型的 Key2.3 批量操作 3. 额外功能 1. 与 .NET Core 缓存的关系和差异 ABP 框架中的缓存系统核心包是 Volo.Abp.Caching &#xff0c;而对于分布式缓存…

技术洞察:C++在后端开发中的前沿趋势与社会影响

文章目录 引言C在后端开发中的前沿趋势1. 高性能计算的需求2. 微服务架构的兴起3. 跨平台开发的便利性 跨领域技术融合与创新实践1. C与人工智能的结合2. C与区块链技术的融合 C对社会与人文的影响1. 提升生产力与创新能力2. 促进技术教育与人才培养3. 技术与人文的深度融合 结…