摘要:提供三種類型的梯度濾波器或高通濾波器,,和和導數算子是結合了高斯平滑與微分運算的結合方法,所以它的抗噪聲能力很強用戶可以設定求導方向,水平或者垂直通過參數和也可以指定卷積核大小,通過參數如果,那么一個的濾波器會被使用,該濾波器會得到比濾波
Image Gradients
OpenCV提供三種類型的梯度濾波器或高通濾波器,Sobel,Scharr和Laplacian.
1 Sobel 和 Scharr 導數Sobel算子是結合了高斯平滑與微分運算的結合方法,所以它的抗噪聲能力很強.
用戶可以設定求導方向,水平或者垂直(通過參數yorder和xorder).也可以指定卷積核大小,通過參數ksize.如果ksize=-1,那么一個3*3的scharr濾波器會被使用,該濾波器會得到比Sobel濾波器更好的效果.
2該方法計算了圖像的拉普拉斯導數:
$$ Delta src = frac{partial ^2{src}}{partial x^2} + frac{partial ^2{src}}{partial y^2} $$
每個求導數的方法都是使用Sobel求導方法,如果ksize=1,那么會使用下面核函數進行濾波.
$$ 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
在我們的上一個示例中,輸出數據類型為cv.CV_8U或np.uint8.但是這有一個小問題.將黑到白轉換視為正斜率(它具有正值),而將白到黑轉換視為負斜率(它具有負值). 因此,當您將數據轉換為np.uint8時,所有負斜率都為零.
如果想要兩種邊界都檢測到,最高的辦法就是將輸出數據類型設置更高,cv2.CV_16S,cv2.CV_64F等等,然后取絕對值轉換為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()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42009.html
摘要:雖然邊低于,但它連接到邊,因此也被視為有效邊,我們得到完整的曲線。但邊緣雖然高于并且與邊緣的區域相同,但它沒有連接到任何真實邊緣,因此被丟棄。 Canny Edge Detection Canny邊緣檢測是一種流行的邊緣檢測算法.它是由John F. Canny開發的, 這是一個多階段算法. 減少噪音由于邊緣檢測易受圖像中的噪聲影響,因此第一步是使用5x5高斯濾波器去除圖像中的噪...
摘要:使用,進行基本的圖像處理提取紅色圓圈輪廓并繪制效果圖源碼寫這篇博客源于博友的提問,想提取圖片中的紅色圓圈坐標,并繪制封閉的輪廓。還是使用一系列圖像處理,得到了比較理想的結果。 ...
閱讀 2067·2021-10-12 10:12
閱讀 788·2021-09-24 09:47
閱讀 1187·2021-08-19 11:12
閱讀 3461·2019-08-29 13:06
閱讀 681·2019-08-26 11:43
閱讀 2563·2019-08-23 17:20
閱讀 1146·2019-08-23 16:52
閱讀 2594·2019-08-23 14:27