首页 > 软件开发 > PYTHON >

python下利用opencv进行梯度计算

来源:互联网 2023-03-16 19:13:36 323

梯度计算经常在边缘检测,通过判别灰度变化的程度和方向,从而判断是否存在边缘。常用的有sobel , 拉普拉斯等方法,现在介绍Scharr方法实现梯度计算,它和sobel很向,但是算子核不同。ope办公区 - 实用经验教程分享!

工具/原料

  • opencv python
  • pycharm win7

方法/步骤

  • 1

    梯度就是通过对二维离散函数求导,它在边缘上的灰度变化,可以通过梯度方向的最大变化率进行表达,通过求导得出梯度变化方向和幅值等信息。ope办公区 - 实用经验教程分享!

    3x3 Scharr滤波器一般比3x3 Sobel滤波器效果好。结合了高斯平滑与微分。ope办公区 - 实用经验教程分享!

    其算子如图。ope办公区 - 实用经验教程分享!

    python下利用opencv进行梯度计算ope办公区 - 实用经验教程分享!

  • 2

    首先还是ope办公区 - 实用经验教程分享!

    先计算 x,y两个方向Scharr,然后进行绝对值,因为前面变成浮点数,求导后可能出现负值。ope办公区 - 实用经验教程分享!

    import cv2 as cvimport numpy as npimport copyimport osfrom matplotlib import pyplot as pltfrom skimage.measure import compare_ssimimage = cv.imread("c:\\dajiangdahe.png", 1)ope办公区 - 实用经验教程分享!

    scharr_y = cv.Scharr(image,cv.CV_64F,dx=0,dy=1)ope办公区 - 实用经验教程分享!

    scharr_x = cv.Scharr(image,cv.CV_64F,dx=1,dy=0)ope办公区 - 实用经验教程分享!

    scharr_x = cv.convertScaleAbs(scharr_x)ope办公区 - 实用经验教程分享!

    scharr_y = cv.convertScaleAbs(scharr_y)ope办公区 - 实用经验教程分享!

    python下利用opencv进行梯度计算ope办公区 - 实用经验教程分享!

    python下利用opencv进行梯度计算ope办公区 - 实用经验教程分享!

    python下利用opencv进行梯度计算ope办公区 - 实用经验教程分享!

  • 3

    然后把2个方向的计算数值通过addWeighted整合为最后结果。ope办公区 - 实用经验教程分享!

    scharrOver = cv.addWeighted(scharr_x,0.5,scharr_y,0.5,0)ope办公区 - 实用经验教程分享!

    cv.imshow("image",image)ope办公区 - 实用经验教程分享!

    cv.imshow("scharr_x",scharr_x)ope办公区 - 实用经验教程分享!

    cv.imshow("scharr_y",scharr_y)ope办公区 - 实用经验教程分享!

    cv.imshow("picture",scharrOver)ope办公区 - 实用经验教程分享!

    cv.waitKey()ope办公区 - 实用经验教程分享!

    python下利用opencv进行梯度计算ope办公区 - 实用经验教程分享!

  • 4

    再举个例子看得比较清楚。ope办公区 - 实用经验教程分享!

    还是采用米框图ope办公区 - 实用经验教程分享!

    image = cv.imread("c:\\color_MiLine.png", 1)ope办公区 - 实用经验教程分享!

    scharr_x = cv.Scharr(image,cv.CV_64F,dx=1,dy=0)ope办公区 - 实用经验教程分享!

    scharr_x = cv.convertScaleAbs(scharr_x)ope办公区 - 实用经验教程分享!

    scharr_y = cv.Scharr(image,cv.CV_64F,dx=0,dy=1)ope办公区 - 实用经验教程分享!

    scharr_y = cv.convertScaleAbs(scharr_y)ope办公区 - 实用经验教程分享!

    scharrOver = cv.addWeighted(scharr_x,0.5,scharr_y,0.5,0)ope办公区 - 实用经验教程分享!

    cv.imshow("image",image)ope办公区 - 实用经验教程分享!

    cv.imshow("scharr_x",scharr_x)ope办公区 - 实用经验教程分享!

    cv.imshow("scharr_y",scharr_y)ope办公区 - 实用经验教程分享!

    cv.imshow("picture",scharrOver)ope办公区 - 实用经验教程分享!

    cv.waitKey()ope办公区 - 实用经验教程分享!

    cv.destroyAllWindows()ope办公区 - 实用经验教程分享!

    python下利用opencv进行梯度计算ope办公区 - 实用经验教程分享!

    python下利用opencv进行梯度计算ope办公区 - 实用经验教程分享!

  • 5

    分别输出三种图像进行观察ope办公区 - 实用经验教程分享!

    cv.imshow("image",image)ope办公区 - 实用经验教程分享!

    cv.imshow("scharr_x",scharr_x)ope办公区 - 实用经验教程分享!

    cv.imshow("scharr_y",scharr_y)ope办公区 - 实用经验教程分享!

    cv.imshow("picture",scharrOver)ope办公区 - 实用经验教程分享!

    cv.waitKey()ope办公区 - 实用经验教程分享!

    cv.destroyAllWindows()ope办公区 - 实用经验教程分享!

    python下利用opencv进行梯度计算ope办公区 - 实用经验教程分享!

    python下利用opencv进行梯度计算ope办公区 - 实用经验教程分享!

    python下利用opencv进行梯度计算ope办公区 - 实用经验教程分享!

  • 5相关内容非法爬取自百度经验
  • 6

    通过计算可以检测边缘,效果还可以ope办公区 - 实用经验教程分享!

  • 注意事项

    • convertScaleAbs 还是要有,否则容易有问题
    • Scharr函数进行求梯度计算

    以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!ope办公区 - 实用经验教程分享!


    标签: python

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码