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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • react 父子传值_react 父子组件传值 兄弟组件传值「建议收藏」

    react 父子传值_react 父子组件传值 兄弟组件传值「建议收藏」一、子向父组件传值方法一:父组件//方法parentFn(data1,data2,e){//按照参数排列最后一个是eventconsole.log(data1,data2,e)//输出12event内容}//渲染render(){return(//子组件)}子组件//渲染render(){return(//可以直接获取props调用也可以重新定义在方法中调用子…

    2022年5月13日
    32
  • 在pycharm中配置Anaconda的python工具包_pycharm配置远程解释器

    在pycharm中配置Anaconda的python工具包_pycharm配置远程解释器PyCharm导入Anaconda,进行环境搭建与配置设置;或PyCharm导入Python3.x,进行环境搭建与配置设置。PyCharm配置Anaconda3.0解释器方法如下:本人使用的是Anaconda3+PyCharm,因此是将Anaconda3导进PyCharm,将两者进行配置,搭建环境,进行相关设置。如果你使用的是Python+PyCharm,相关操作类似。首先,新建一个项目文件…

    2022年8月28日
    0
  • react native停止维护_被舍弃

    react native停止维护_被舍弃ReactNativeNavigator被舍弃解决办法转载于:https://blog.csdn.net/xinganbu124/article/details/76099884Facebook在ReactNative0.44的时候将Navigator舍弃掉,推荐使用react-navigation,但有一些老的项目已经使用了Navigator就不好迁移到re…

    2022年9月11日
    1
  • mac tensorboard

    mac tensorboard

    2021年5月27日
    106
  • linux命令行字体大小_linux命令行写代码

    linux命令行字体大小_linux命令行写代码2019年7月12日更新链接:https://pan.baidu.com/s/17RDrepFf-GI427I7k3jBcQ提取码:qk8k网上的大部分都要积分什么的,很麻烦。这本很清晰,分享给大家。转载于:https://www.cnblogs.com/lixiaoxu/p/7590237.html…

    2022年9月27日
    1
  • php用哪个版本_php什么版本好

    php用哪个版本_php什么版本好一. PHP5.2、5.3、5.4、5.5、5.6版本区别对比以及新功能详解1.php5.2以前1.1autoload的使用;当在代码中使用一个未定义的类的时候,该函数就会被调用

    2022年8月2日
    3

发表回复

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

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