11-图像梯度-Sobel算子

在这里插入图片描述
图像梯度是指图像某像素在x和y两个方向上的变化率(与相邻像素比较),是一个二维向量,由2个分量组成,X轴的变化、Y轴的变化 。
其中X轴的变化是指当前像素右侧(X加1)的像素值减去当前像素左侧(X减1)的像素值。
同理,Y轴的变化是当前像素下方(Y加1)的像素值减去当前像素上方(Y减1)的像素值。

其实Sobel算子求梯度也是分为x轴方向和y轴方向,说白了就是将一个卷积核进行上下左右划分,x轴方向上就是右➖左,y轴方向上就是下➖上

cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3)
第一个参数:当前的图像对象名称
第二个参数:当前图像的深度,通常情况下指定为-1,表示输出和输入的深度是一样的;cv2.CV_64F可以存6字节的大小,为了方便后面的取绝对值操作
第三个参数:是否算X轴的水平方向,若为1表示计算X轴方向,若为0表示不计算X轴方向
第四个参数:是否算Y轴的竖直方向,若为1表示计算Y轴方向,若为0表示不计算Y轴方向
第五个参数:ksize指定的卷积核是多大的,通常情况下都是奇数大小,例如:3×3的卷积核

import cv2
import numpy as npdef show_photo(name,picture):cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()#原图:
img = cv2.imread('E:\Jupyter_workspace\study\data/pie.png',cv2.IMREAD_GRAYSCALE)
show_photo('img',img)#x轴方向
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3)#这里的CV_64F可以存储的位数很多,以便于后续的取绝对值操作
show_photo('sobelx',sobelx)
#由于右减左,下减上原则
#原图左部分,右为圈内白色左为圈外黑色,白-黑结果为正,显示
#原图右部分,右为圈外黑色左为圈内白色,黑-白结果为负,不显示#y轴方向
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize = 3)#这里的CV_64F可以存储的位数很多,以便于后续的取绝对值操作
show_photo('sobely',sobely)
#由于右减左,下减上原则
#原图下部分,下为圈内白色上为圈外黑色,白-黑结果为正,显示
#原图上部分,下为圈外黑色上为圈内白色,黑-白结果为负,不显示

原图:
在这里插入图片描述

白到黑是正数,黑到白是负数,所有的负数都被截断为0(显示黑色),也就是只显示一半的轮廓

x轴方向取梯度:
在这里插入图片描述
y轴方向取梯度:
在这里插入图片描述

故此时需要进行绝对值操作,为了将两边的轮廓都显示出来
import cv2
import numpy as npdef show_photo(name,picture):#显示图像函数cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()#原图:
img = cv2.imread('E:\Jupyter_workspace\study\data/pie.png',cv2.IMREAD_GRAYSCALE)
show_photo('img',img)#x轴方向,取绝对值
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3)
sobelx = cv2.convertScaleAbs(sobelx)#取绝对值
show_photo('sobelx',sobelx)#y轴方向,取绝对值
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize = 3)
sobely = cv2.convertScaleAbs(sobely)#取绝对值
show_photo('sobely',sobely)#分别计算x和y,再求和
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)#进行加权后相加,最好一个参数表示偏移量,一般默认为0
show_photo('sobelxy',sobelxy)#### 不建议直接计算,最后的效果并不是特别好
#### 需要求梯度的时候分别计算然后求和效果会好些
sobelxy = cv2.Sobel(img,cv2.CV_64F,1,1,ksize = 3)
sobelxy = cv2.convertScaleAbs(sobelxy)
show_photo('sobelxy',sobelxy)

原图:
在这里插入图片描述
x轴方向,取绝对值:
在这里插入图片描述
y轴方向,取绝对值:
在这里插入图片描述
分别计算x和y,再求和:
在这里插入图片描述
直接计算:
不建议直接计算,最后的效果并不是特别好
需要求梯度的时候分别计算然后求和效果会好些
在这里插入图片描述

换一张照片来进行梯度操作效果更明显

import cv2
import numpy as npdef show_photo(name,picture):#显示图像函数cv2.imshow(name,picture)cv2.waitKey(0)cv2.destroyAllWindows()img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png',cv2.IMREAD_GRAYSCALE)
show_photo('img',img)#显示原图sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3)#求X轴方向梯度
sobelx = cv2.convertScaleAbs(sobelx)#取绝对值
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize = 3)#求Y轴方向梯度
sobely = cv2.convertScaleAbs(sobely)#取绝对值
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)#加权相加
show_photo('sobelxy',sobelxy)#显示整体梯度后的效果img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png',cv2.IMREAD_GRAYSCALE)
sobelxy = cv2.Sobel(img,cv2.CV_64F,1,1,ksize = 3)#X轴和Y轴同时求方向梯度
sobelxy = cv2.convertScaleAbs(sobelxy)
show_photo('sobelxy',sobelxy)

原图:
在这里插入图片描述
分别对X轴方向求梯度和Y轴方向求梯度,然后加权求和:
在这里插入图片描述
对X轴方向和Y轴方向同时求梯度:
在这里插入图片描述

总结:对X轴和Y轴分别计算其梯度,然后加权求和效果会好些

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

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

相关文章

形态学操作——击中击不中变换

操作目的 HitMiss变换是形态检测的一个工具,通过定义形状模板可以在图像中获取同一形状物体的位置坐标。 算法讲解 1、用击中结构去腐蚀原始图像得到击中结果X(这个过程可以理解为在原始图像中寻找和击中结构完全匹配的模块,匹配上了之后&…

12-图像梯度-Scharr算子和laplacian算子

Scharr算子 cv2.Scharr(img,cv2.CV_64F,1,0) 第一个参数:当前的图像对象名称 第二个参数:当前图像的深度,通常情况下指定为-1,表示输出和输入的深度是一样的;cv2.CV_64F可以存6字节的大小,为了方便后面的取…

Opencv——图像金字塔与图像尺寸缩放

主要讲解 1、resize()函数调用 函数定义: 调用方式: resize(srcImage, dstImage, Size(64, 128)); //对图片进行修改 resize(srcImage, dstImage, Size(), 0.5, 0.5);第6个参数的含义: INTER_NEAREST:最邻近插值 (放大好用) INTER_ARE…

13-Canny边缘检测

Canny边缘检测主要思路步骤如下: 1,使用高斯滤波器,以平滑图像,滤除噪声 2,计算图像中每个像素点的梯度强度和方向 3,应用非极大值抑制,以消除边缘检测带来的杂散响应 4,应用双阈值检…

微机原理——移位指令

例题 思路 选择移位语句,右移,将AL移出的送入DX左端,将BL移出的送入DX左端。循环八次 MOV AL,01100101B; MOV BL,11011010B; XOR DX,DX;两个值相同,异或结果为0。等效:MOV DX,0 MOV CX,8;count L1: SHR AL,1;逻辑右…

14-图像金字塔

由第一个图可知,图像金字塔这无非就是对图像进行放大和缩小罢了 1,高斯金字塔 向下采样方法(缩小),越采样越小,即从金字塔底部向上采样 cv2.pyrDown(img) 向上采样方法(放大),越采样越大,即从金字塔顶…

Eclipse C/C++开发环境搭建

1 Eclipse的安装 到http://java.sun.com/j2se/1.5.0/download.jsp 下载JRE安装; 到http://eclipse.org下载Eclipse安装。(这儿可以下载Java版本的,也可以下载C/C 版本的) 2 对于下载的Java版本或着只下载Eclipse IDE的&#xff0c…

微机原理——寻址方式总结

一、操作数的寻址方式 立即寻址方式 格式: 操作码 数字表达式(将数据送入寄存器中) 源操作数可以是8位也可以是16位。 MOV AH, F5H (字节操作) F5H称为立即数(8位操作数) MOV AL, 8AH (字节操作) 8AH称为…

15-轮廓检测

边缘是零零散散的,而轮廓是一个整体 cv2.findContours(img,mode,method) img:输入图像对象名称 mode:轮廓检索模式 RETR_EXTERNAL:只检索最外面的轮廓 RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中…

抛硬币仿真实验java_探索HyperLogLog算法(含Java实现)

引言HyperLogLog算法经常在数据库中被用来统计某一字段的Distinct Value(下文简称DV),比如Redis的HyperLogLog结构,出于好奇探索了一下这个算法的原理,无奈中文资料很少,只能直接去阅读论文以及一些英文资料,总结成此文…

微机原理——总线和时序

前提 8088有两个组态: 最大组态和最小组态,通过引脚MN/MX*的电平决定组态。(*表示低电平有效) 两种组态没有本质区别。 8088的引脚: 引脚可分为下面几种类别: 1、数据和地址引脚 2、读写控制引脚 3、中断…

PHP站内搜索:多关键字查找,加亮显示

1、SQL语句中的模糊查找LIKE条件一般用在指定搜索某字段的时候, 通过"% _" 通配符的作用实现模糊查找功能,通配符可以在前面也可以在后面或前后都有。搜索以PHP100开头: SELECT * FROM teble WHERE title LIKE PHP100% 搜索以PHP100结束&…

16-模板匹配

cv2.matchTemplate(img,template,cv2.TM_SQDIFF) 参数一:原图图像对象名称 参数二:模板图像对象名称 参数三:差别程度的计算方法(六选一推荐使用带归一化的) 模板匹配和卷积原理很像,模板从原图像上从原点开始滑动,计…

用C#开发Windows应用程序

To develop windows application, we need to using studio and follow some steps: 要开发Windows应用程序 ,我们需要使用studio并遵循一些步骤: Step 1) First of all we launch visual studio. 步骤1)首先,我们启动Visual Studio。 Ste…

图像分割——基于二维灰度直方图的阈值处理

前言 像素灰度值仅仅反映了像素灰度级的幅值大小,并没有反映出像素与邻域的空间相关信息。 二维灰度直方图的概念 二维灰度直方图:像素的灰度值分布和邻域的平均灰度值分布构成的二维直方图 二维直方图的值N(i,j) 。其中,if(x,y) 图像(x,y…

17-直方图

直方图 何为直方图?没那么高大上,其实就是二维统计图。每个照片都是有像素点所组成,当然也是[0,255],直方图就是统计每个值所对应的像素点有几个。 直方图横坐标表示0-255这些像素点值;纵坐标表示对应像素点值的个数有…

Opencv实战【1】人脸检测并对ROI区域进行部分处理(变身乔碧萝!!!)

步骤: 1、利用Opencv自带的分类器检测人脸 预备知识:Haar特征分类器 Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。 Haar特征分类器存放地址: (找自己的安装…

【黑马甄选离线数仓day10_会员主题域开发_DWS和ADS层】

day10_会员主题域开发 会员主题_DWS和ADS层 DWS层开发 门店会员分类天表: 维度指标: 指标:新增注册会员数、累计注册会员数、新增消费会员数、累计消费会员数、新增复购会员数、累计复购会员数、活跃会员数、沉睡会员数、会员消费金额 维度: 时间维度&#xff08…

iPad和iPhone的app图标尺寸、用途、设置方法

下面是在iPhone专用程序、iPad专用程序和通用程序中使用图标文件的指导,由译言网翻译自苹果官方文档。原文 http://article.yeeyan.org/view/395/100567 注意:图标是你的程序包所必需的组成部分。如果你没有提供程 序所需的各种尺寸的图标,系…

18-傅里叶变化

以时间为参照就是时域分析,当然时间是动态变化的 而傅里叶变换是以频域为基准的,不用关心动态变化,只关心做了多少次而已,次数,频率 傅里叶说过,任何一个周期函数都可以用正弦函数堆叠起来形成。强吧&#…