如何使用OpenCV Python中的Scharr算子查找图像梯度?
使用Scharr算子,我们可以使用一阶导数在水平和垂直方向上计算图像梯度。梯度是针对灰度图像计算的。您可以使用方法cv2.scharr() 在图像上应用Scharr运算。
语法
使用Scharr导数计算图像梯度的语法如下 –
cv2.Scharr(img, ddepth, xorder, yorder)
参数
- img − 原始输入图像。
-
ddepth − 输出图像的期望深度。它包含关于输出图像中存储的数据类型的信息。 我们使用 cv2.CV_64F 作为ddepth。它是一个64位浮点型Opencv。
-
xorder − 水平方向(X方向)上的导数次数。将xorder=1、yorder=0设置为X方向上的一阶导数。
-
Yorder − 垂直方向(Y方向)上的导数次数。将xorder=0、yorder=1设置为Y方向上的一阶导数。
步骤
您可以使用以下步骤使用Scharr导数查找图像梯度 –
导入所需库。在所有以下Python示例中,所需的Python库是 OpenCV 。确保您已经安装它。
import cv2
使用 cv2.imread() 读取输入图像作为灰度图像。
img = cv2.imread('lines.jpg',0)
使用 cv2.Scharr() 计算Sobel或Laplacian导数。 此导数是指图像梯度。
scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)
使用 cv2.imshow() 方法显示图像梯度。
cv2.imshow("Scharr X", scharrx)
cv2.waitKey(0)
cv2.destroyAllWindows()
让我们查看更多示例以更清晰的理解。
示例1
在以下Python示例中,我们使用Scharr算子在X(水平)和Y(垂直)方向上计算图像梯度。
#导入所需库
import cv2
#使用灰度图像读取输入图像
img = cv2.imread('window.jpg',0)
#计算x方向上的一阶Sobel导数
scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)
#计算y方向上的一阶Sobel导数
scharry = cv2.Scharr(img,cv2.CV_64F,0,1)
#显示scharrx和scharry
cv2.imshow("Scharr X", scharrx)
cv2.waitKey(0)
cv2.imshow("Scharr Y", scharry)
cv2.waitKey(0)
cv2.destroyAllWindows()
我们将使用以下图片 ” window.jpg ” 作为 输入文件 在上述程序中。
输出
当您执行上述程序时,它将生成以下 两个输出 窗口 - “Scharr X” 和 “Scharr Y”。
示例2
在下面的Python示例中,我们使用Scharr算子在X(水平)和Y(垂直)方向上计算图像梯度。
#导入所需的库
import cv2
#将输入图像读取为灰度图像
img = cv2.imread('tutorialspoint.png',0)
#计算x方向的1级Sobel导数
scharrx = cv2.Scharr(img,cv2.CV_64F,1,0)
#计算y方向的1级Sobel导数
scharry = cv2.Scharr(img,cv2.CV_64F,0,1)
#显示scharrx和scharry
cv2.imshow("Scharr X",scharrx)
cv2.waitKey(0)
cv2.imshow("Scharr Y",scharry)
cv2.waitKey(0)
cv2.destroyAllWindows()
我们将使用这张图片“ tutorialspoint.png ”作为上述程序中的 输入文件 。
输出
执行上述程序将产生以下两个输出窗口。