python-opencv图像处理:sobel算子

python-opencv图像处理:sobel算子Sobel原理:https://blog.csdn.net/zfjBIT/article/details/86655444函数原型:”’Sobel算子Sobel算子依然是一种过滤器,只是其是带有方向的。在OpenCV-Python中,使用Sobel的算子的函数原型如下:dst=cv2.Sobel(src,ddepth,dx,dy[,dst[,ksize[,s…

大家好,又见面了,我是你们的朋友全栈君。

Sobel原理:

https://blog.csdn.net/zfjBIT/article/details/86655444

函数原型:

'''
Sobel算子
Sobel算子依然是一种过滤器,只是其是带有方向的。在OpenCV-Python中,
使用Sobel的算子的函数原型如下:
dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]]) 
前四个是必须的参数:
第一个参数是需要处理的图像;
第二个参数是图像的深度,-1表示采用的是与原图像相同的深度。目标图像的深度必须大于等于原图像的深度;
dx和dy表示的是求导的阶数,0表示这个方向上没有求导,一般为0、1、2。
其后是可选的参数:
dst:结果图;
ksize是Sobel算子的大小,必须为1、3、5、7。
scale是缩放导数的比例常数,默认情况下没有伸缩系数;
delta是一个可选的增量,将会加到最终的dst中,同样,默认情况下没有额外的值加到dst中;
borderType是判断图像边界的模式。这个参数默认值为cv2.BORDER_DEFAULT。
'''

在OpenCV-Python中,Sobel函数的使用如下:

#coding=utf-8 
import cv2 
import numpy as np 
img = cv2.imread("./lion.jpg", 0) 
x = cv2.Sobel(img,cv2.CV_16S,1,0) 
y = cv2.Sobel(img,cv2.CV_16S,0,1) 

absX = cv2.convertScaleAbs(x) # 转回uint8 
absY = cv2.convertScaleAbs(y) 
dst = cv2.addWeighted(absX,0.5,absY,0.5,0) 

cv2.imshow("absX", absX) 
cv2.imshow("absY", absY) 
cv2.imshow("Result", dst) 
cv2.waitKey(0) 

cv2.destroyAllWindows() 

说明:

  • 在Sobel函数的第二个参数这里使用了cv2.CV_16S。因为OpenCV文档中对Sobel算子的介绍中有这么一句:“in the case of 8-bit input images it will result in truncated derivatives”。即Sobel函数求完导数后会有负值,还有会大于255的值。而原图像是uint8,即8位无符号数,所以Sobel建立的图像位数不够,会有截断。因此要使用16位有符号的数据类型,即cv2.CV_16S。在经过处理后,别忘了用convertScaleAbs()函数将其转回原来的uint8形式。否则将无法显示图像,而只是一副灰色的窗口。convertScaleAbs()的原型为:
  • dst = cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])

        其中可选参数alpha是伸缩系数,beta是加到结果上的一个值。结果返回uint8类型的图片。

  • 由于Sobel算子是在两个方向计算的,最后还需要用cv2.addWeighted(…)函数将其组合起来。其函数原型为:

        dst=cv2.addWeighted(src1,alpha,src2,beta,gamma[,dst[,dtype]])

        其中alpha是第一幅图片中元素的权重,beta是第二个的权重,gamma是加到最后结果上的一个值。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158988.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • golang的AES加密和解密的三种模式实现(CBC/ECB/CFB)「建议收藏」

    golang的AES加密和解密的三种模式实现(CBC/ECB/CFB)packagemainimport( "bytes" "crypto/aes" "crypto/cipher" "crypto/rand" "encoding/base64" "encoding/hex"

    2022年4月16日
    199
  • JAVA贪吃蛇小游戏_js贪吃蛇难吗

    JAVA贪吃蛇小游戏_js贪吃蛇难吗《Java小游戏实现》:贪吃蛇在完成坦克大战之后,就想到了贪吃蛇这个小游戏,因为这两个游戏太像了,因此,就决定把这个游戏来尝试的写下。接下来的几篇博文就是来记录这个小游戏实现的全过程。突然,想起,一年前(时间是2015年7月3日),我刚学习Java的时候看过别人写的这个游戏源代码,还专门写了篇博文,连接如下:http://blog.csdn.net/u010412719/article/detail

    2022年4月20日
    49
  • sql server 2008如何导入mdf,ldf文件

    sql server 2008如何导入mdf,ldf文件

    2022年1月9日
    81
  • Android入门学习教程PDF免费下载

    Android入门学习教程PDF免费下载场景Android(安卓)是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。2005年由Google收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。实现关注公众号:霸道的程序猿回复:Android书籍免费下载。…

    2022年5月10日
    41
  • 软件工程期末试题及答案(史上最全)

    软件工程期末试题及答案(史上最全)软件工程期末试题及答案1.开发瀑布模型中的软件定义时期各个阶段依次是:(B)A)可行性研究,问题定义,需求分析。B)问题定义,可行性研究,需求分析。C)可行性研究,需求分析,问题定义。D)以上顺序都不对。(软件开发时期:概要设计、详细设计、软件实现、软件测试)2.可行性研究主要从以下几个方面进行研究:(A)A)技术可行性,经济可行性,操作可行性。B)技术可行性,经济可行性,系统可行性。C)经济可行性,系统可行性,操作可行性。D)经济可行性,系统可行性,时间可行性。..

    2022年9月2日
    5
  • 思科静态路由配置_思科交换机trunk配置命令

    思科静态路由配置_思科交换机trunk配置命令1.配置静态路由路由器可以将不同网段之间的网络连接到一起,当路由器接收到数据包后要查看数据包中的目标IP,再检查自己的路由表,如果路由表中有和目标IP相匹配的路由条目,路由器才能将数据包按照该路由条目所指定的端口转发出去,实现不同网络之间的通信,那么路由器中的路由表是如何实现的呢?配置了路由器接口IP并为UP状态路由表中自动生成直连路由,对于非直连的路由,需通过静态路由管理员手工添加或通过配置动…

    2022年9月24日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号