立即学习:https://edu.csdn.net/course/play/10552/234943?utm_source=blogtoedu
图像梯度- sobel算子函数及使用
dst = cv2.Sobel(src,ddepth,dx,dy,[ksize])
ksize 核大小
ddepth ,处理结果图像深度
通常情况下,可以将该参数的值设置为-1,让处理结果与原始图像保持一致。
(实际操作中,计算梯度值可能会出现负数。通常计算时,使用更高的数据类型cv2.CV_64F),取绝对值后,再转换为np.uint8(cv2.CV_8U)类型。)
dst = cv2.convertScaleAbs(src[,alpha[,beta]])作用:将原始图像src转换为256色位图(取绝对值)
目标图像 = 调整(src*alpha+beta)
计算x方向梯度:【dx=1,dy=0】
计算y方向梯度:【dx=0,dy=1】
计算双方向梯度有两种方式
方式1 : dx=1,dy=1 (有缺陷)
方式2 : 分别计算dx,dy后相加
dx = cv2.Sobel(src,ddepth,1,0)
dy = cv2.Sobel(src,ddepth,0,1)
dst = dx + dy (可能会溢出)
dst = alpha*dx + beta*dy
dst = cv2.addWeighted(src1,alpha,src2,beta,gamma)
import cv2
import numpy as np
img = cv2.imread('111.jpg',cv2.IMREAD_UNCHANGED)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
k = np.ones((5,5),np.uint8)
sobel = cv2.Sobel(gray, -1, 1, 1) #测试同时计算
sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0) #分别沿x,y方向计算梯度
sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1)
dstx = cv2.convertScaleAbs(sobelx) # 取绝对值
dsty = cv2.convertScaleAbs(sobely)
dst = cv2.addWeighted(dstx,0.5, dsty, 0.5, 0) #加权求和
cv2.namedWindow('sobel',cv2.WINDOW_AUTOSIZE)
cv2.namedWindow('dstx',cv2.WINDOW_AUTOSIZE)
cv2.namedWindow('dsty',cv2.WINDOW_AUTOSIZE)
cv2.namedWindow('dst',cv2.WINDOW_AUTOSIZE)
cv2.imshow('gray',gray)
cv2.imshow('sobel',sobel)
cv2.imshow('dstx',dstx)
cv2.imshow('dsty',dsty)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()