zoukankan      html  css  js  c++  java
  • OpenCV--图像梯度处理

    图像梯度-Sobel算子

    img = cv2.imread('pie.png',cv2.IMREAD_GRAYSCALE)
    cv2.imshow("img",img)
    cv2.waitKey()
    cv2.destroyAllWindows()

    效果:

    dst = cv2.Sobel(src, ddepth, dx, dy, ksize)

    ddepth:图像的深度
    dx和dy分别表示水平和竖直方向
    ksize是Sobel算子的大小

    def cv_show(img,name):
        cv2.imshow(name,img)
        cv2.waitKey()
        cv2.destroyAllWindows()
    sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
    
    cv_show(sobelx,'sobelx')

    效果:

    sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
    sobelx = cv2.convertScaleAbs(sobelx) #白到黑是正数,黑到白就是负数了,所有的负数会被截断成0,所以要取绝对值
    cv_show(sobelx,'sobelx')

    效果:

    sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
    sobely = cv2.convertScaleAbs(sobely)  
    cv_show(sobely,'sobely')

    效果:

    sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0) #分别计算x和y,再求和的结果
    cv_show(sobelxy,'sobelxy')

    效果:

    sobelxy=cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3) #直接计算的效果,不是很好
    sobelxy = cv2.convertScaleAbs(sobelxy) 
    cv_show(sobelxy,'sobelxy')

    效果:

    img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
    cv_show(img,'img')

    效果:

    img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
    sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
    sobelx = cv2.convertScaleAbs(sobelx)
    sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
    sobely = cv2.convertScaleAbs(sobely)
    sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
    cv_show(sobelxy,'sobelxy')

    效果:

    img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
    
    sobelxy=cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3)
    sobelxy = cv2.convertScaleAbs(sobelxy) 
    cv_show(sobelxy,'sobelxy')

    效果:

    图像梯度-Scharr算子与laplacian算子

     

    Scharr算子Gy右边的-3改为3

     laplacian算子

    #不同算子的差异
    img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
    sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
    sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
    sobelx = cv2.convertScaleAbs(sobelx)   
    sobely = cv2.convertScaleAbs(sobely)  
    sobelxy =  cv2.addWeighted(sobelx,0.5,sobely,0.5,0)  
    
    scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)
    scharry = cv2.Scharr(img,cv2.CV_64F,0,1)
    scharrx = cv2.convertScaleAbs(scharrx)   
    scharry = cv2.convertScaleAbs(scharry)  
    scharrxy =  cv2.addWeighted(scharrx,0.5,scharry,0.5,0) 
    
    laplacian = cv2.Laplacian(img,cv2.CV_64F)
    laplacian = cv2.convertScaleAbs(laplacian)   
    
    res = np.hstack((sobelxy,scharrxy,laplacian))
    cv_show(res,'res')

    效果:

  • 相关阅读:
    oracle的row_number()和rownum
    linux视频学习6(mysql的安装/)
    linux视频学习5(top, 网络监控
    linux视频学习4(crontab和进程)
    linux的视频学习4(网络配置和rpm)
    linux视频学习3(shell和网络)
    linux视频学习3(linux安装,shell,tcp/ip协议,网络配置)
    linux(视频学习)2
    linux视频学习(简单介绍)20160405
    java代码用dom4j解析xml文件的简单操作
  • 原文地址:https://www.cnblogs.com/SCCQ/p/12291183.html
Copyright © 2011-2022 走看看