成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

opencv python 圖像梯度

mumumu / 1284人閱讀

摘要:提供三種類型的梯度濾波器或高通濾波器,,和和導(dǎo)數(shù)算子是結(jié)合了高斯平滑與微分運(yùn)算的結(jié)合方法,所以它的抗噪聲能力很強(qiáng)用戶可以設(shè)定求導(dǎo)方向,水平或者垂直通過參數(shù)和也可以指定卷積核大小,通過參數(shù)如果,那么一個(gè)的濾波器會(huì)被使用,該濾波器會(huì)得到比濾波

Image Gradients

OpenCV提供三種類型的梯度濾波器或高通濾波器,Sobel,Scharr和Laplacian.

1 Sobel 和 Scharr 導(dǎo)數(shù)

Sobel算子是結(jié)合了高斯平滑與微分運(yùn)算的結(jié)合方法,所以它的抗噪聲能力很強(qiáng).

用戶可以設(shè)定求導(dǎo)方向,水平或者垂直(通過參數(shù)yorder和xorder).也可以指定卷積核大小,通過參數(shù)ksize.如果ksize=-1,那么一個(gè)3*3的scharr濾波器會(huì)被使用,該濾波器會(huì)得到比Sobel濾波器更好的效果.

2

該方法計(jì)算了圖像的拉普拉斯導(dǎo)數(shù):

$$ Delta src = frac{partial ^2{src}}{partial x^2} + frac{partial ^2{src}}{partial y^2} $$

每個(gè)求導(dǎo)數(shù)的方法都是使用Sobel求導(dǎo)方法,如果ksize=1,那么會(huì)使用下面核函數(shù)進(jìn)行濾波.

$$ kernel = egin{bmatrix} 0 & 1 & 0 1 & -4 & 1 0 & 1 & 0 end{bmatrix} $$

代碼

import cv2
from matplotlib import pyplot as plt

img = cv2.imread("img.jpg",0)

laplacian = cv2.Laplacian(img,cv2.CV_64F)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)

plt.subplot(2,2,1),plt.imshow(img,cmap = "gray")
plt.title("Original"), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap = "gray")
plt.title("Laplacian"), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx,cmap = "gray")
plt.title("Sobel X"), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4),plt.imshow(sobely,cmap = "gray")
plt.title("Sobel Y"), plt.xticks([]), plt.yticks([])

plt.show()

NOTE

在我們的上一個(gè)示例中,輸出數(shù)據(jù)類型為cv.CV_8U或np.uint8.但是這有一個(gè)小問題.將黑到白轉(zhuǎn)換視為正斜率(它具有正值),而將白到黑轉(zhuǎn)換視為負(fù)斜率(它具有負(fù)值). 因此,當(dāng)您將數(shù)據(jù)轉(zhuǎn)換為np.uint8時(shí),所有負(fù)斜率都為零.

如果想要兩種邊界都檢測到,最高的辦法就是將輸出數(shù)據(jù)類型設(shè)置更高,cv2.CV_16S,cv2.CV_64F等等,然后取絕對值轉(zhuǎn)換為cv2.CV_8.

代碼

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread("img5.png",0)


# Output dtype = cv.CV_8U
sobelx8u = cv2.Sobel(img,cv2.CV_8U,1,0,ksize=5)

# Output dtype = cv.CV_64F. Then take its absolute and convert to cv.CV_8U
sobelx64f = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
abs_sobel64f = np.absolute(sobelx64f)
sobel_8u = np.uint8(abs_sobel64f)

plt.subplot(1,3,1),plt.imshow(img,cmap = "gray")
plt.title("Original"), plt.xticks([]), plt.yticks([])
plt.subplot(1,3,2),plt.imshow(sobelx8u,cmap = "gray")
plt.title("Sobel CV_8U"), plt.xticks([]), plt.yticks([])
plt.subplot(1,3,3),plt.imshow(sobel_8u,cmap = "gray")
plt.title("Sobel abs(CV_64F)"), plt.xticks([]), plt.yticks([])

plt.show()

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42009.html

相關(guān)文章

  • opencv python Canny邊緣檢測

    摘要:雖然邊低于,但它連接到邊,因此也被視為有效邊,我們得到完整的曲線。但邊緣雖然高于并且與邊緣的區(qū)域相同,但它沒有連接到任何真實(shí)邊緣,因此被丟棄。 Canny Edge Detection Canny邊緣檢測是一種流行的邊緣檢測算法.它是由John F. Canny開發(fā)的, 這是一個(gè)多階段算法. 減少噪音由于邊緣檢測易受圖像中的噪聲影響,因此第一步是使用5x5高斯濾波器去除圖像中的噪...

    whinc 評論0 收藏0
  • 使用Python,OpenCV進(jìn)行基本的圖像處理——提取紅色圓圈輪廓并繪制

    摘要:使用,進(jìn)行基本的圖像處理提取紅色圓圈輪廓并繪制效果圖源碼寫這篇博客源于博友的提問,想提取圖片中的紅色圓圈坐標(biāo),并繪制封閉的輪廓。還是使用一系列圖像處理,得到了比較理想的結(jié)果。 ...

    Gu_Yan 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<