openCV——梯度运算

阅读 70

2022-04-16

梯度运算

import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
%matplotlib inline 
def cvshow(name, ndarray):
    # 第一个参数表示显示窗口的名字,第二个参数表示数据
    cv2.imshow(name, ndarray)
    # 表示等待多久窗口关闭,毫秒单位。0表示按任意键结束
    cv2.waitKey(0)
    cv2.destroyAllWindows()

Sobel算子

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kCMWkmnZ-1650113054963)(attachment:image.png)]

dst = cv2.Sobel( src, ddepth, dx, dy[,ksize[, scale[, delta[, borderType]]]] )

  • ddepth:代表输出图像的深度
  • dx和dy分别表示水平和竖直方向
  • ksize 代表 Sobel 核的大小。该值为-1 时,则会使用 Scharr 算子进行运算
  • scale 代表计算导数值时所采用的缩放因子,默认情况下该值是 1,是没有缩放的
  • delta 代表加在目标图像 dst 上的值,该值是可选的,默认为 0
  • borderType 代表边界样式
rec = cv2.imread("rectangle.png", cv2.IMREAD_GRAYSCALE)
cvshow("rec", rec)
# Sobel算子获取边缘
rec_sobel_x = cv2.Sobel(rec, -1, 1, 0)
cvshow("sobel_x", rec_sobel_x)

dst = cv2.convertScaleAbs( src [, alpha[, beta]] )

  • dst 代表处理结果
  • src 代表原始图像
  • alpha 代表调节系数,该值是可选值,默认为 1
  • beta 代表调节亮度值,该值是默认值,默认为 0
# Sobel算子获取边缘的标准步骤
rec_x = cv2.Sobel(rec, cv2.CV_64F, 1, 0)
rec_x = cv2.convertScaleAbs(rec_x)
rec_y = cv2.Sobel(rec, cv2.CV_64F, 0, 1)
rec_y = cv2.convertScaleAbs(rec_y)
res_sobel = cv2.addWeighted(rec_x, 0.5, rec_y, 0.5, 0)
cvshow("sobel", res_sobel)

Scharr算子

laplacian算子

#不同算子的差异
lena = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(lena,cv2.CV_64F,1,0,ksize=3)
sobely = cv2.Sobel(lena,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(lena,cv2.CV_64F,1,0)
scharry = cv2.Scharr(lena,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(lena,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)   

res = np.hstack((sobelxy,scharrxy,laplacian))
cvshow("res",res)

精彩评论(0)

0 0 举报