在本文中,我們將了解 OpenCV 中的 filter2d() 函數。簡而言之,使用此函數,我們可以將圖像與內核(通常是二維矩陣)進行卷積,以對圖像應用過濾器。
用法: filter2D (src, dst, ddepth, kernel)
Parameters:
- Src -應用過濾器的源圖像。
- Dst - 應用過濾器後輸出圖像的名稱
- Ddepth -輸出圖像的深度 [-1 將給出與輸入圖像相同的輸出圖像深度]
- Kernel -我們希望圖像與之卷積的二維矩陣。
使用此函數,我們可以在圖像和給定內核之間創建卷積,以創建圖像中的平滑和模糊、銳化和邊檢測等過濾器。此函數將簡單地將 2d 矩陣與像素級圖像進行卷積並生成輸出圖像。要理解這個概念,我們將首先瀏覽內核的概念。
內核:卷積或卷積矩陣中使用的簡單二維矩陣或用於模糊、銳化和邊檢測圖像的掩碼。
內核的工作:那麽,這個內核是如何工作的?讓我們看看,我們都知道圖像在 OpenCV 中表示為像素值。這些像素被排列為矩陣以形成圖像,並且我們知道內核是一個簡單的 2d 矩陣,其中基於內核的函數具有特定值,就像內核用於模糊和銳化圖像時不同。
舉個例子,在這張圖片中,前 3 行和前 3 列就像一個矩陣,我們有一個 3 x 3 矩陣的內核。如圖所示,圖像中的每個像素都有一個像素值(即像素強度)。現在卷積是通過將每個像素值的值與相應位置的內核值相乘來完成的,並通過乘以並形成一個像素(在這種情況下為中心像素,它是 [ 2,2])。並且對圖像中的其餘像素值矩陣重複此方法。
卷積的工作
注意:我們有特定的內核 [2d 卷積矩陣] 來執行特定的任務,例如模糊、銳化和邊檢測。並且圖像中顯示的內核隻是一個示例,而不是任何特定的內核。
一些常見的內核是,
- 身份內核
- 邊檢測內核
- 銳化內核
- 框模糊核
- 高斯模糊核
不同的內核
使用這些內核,我們可以通過簡單地將圖像的像素值和內核中的值進行卷積來形成過濾後的圖像。
使用 2d 卷積矩陣模糊圖像
我們正在通過 NumPy 創建一個如下所示的內核,並將內核作為 filter2d 函數的參數傳遞。
np.ones() will create an array of the desired shape filled all with the ones
模糊內核
示例 1:使用 2d 卷積矩陣模糊圖像
Python3
# importing the modules needed
import cv2
import numpy as np
# Reading the image
image = cv2.imread('image.png')
# Creating the kernel(2d convolution matrix)
kernel1 = np.ones((5, 5), np.float32)/30
# Applying the filter2D() function
img = cv2.filter2D(src=image, ddepth=-1, kernel=kernel1)
# Shoeing the original and output image
cv2.imshow('Original', image)
cv2.imshow('Kernel Blur', img)
cv2.waitKey()
cv2.destroyAllWindows()
輸出:
使用 2d 卷積矩陣模糊圖像
示例 2:邊檢測具有 2d 卷積矩陣的圖像
我們正在通過 NumPy 數組創建一個內核,看起來像這樣,並將內核作為 filter2d 函數的參數傳遞。
邊檢測內核
Python3
# importing the modules needed
import cv2
import numpy as np
# Reading the image
image = cv2.imread('image.png')
# Creating the kernel(2d convolution matrix)
kernel2 = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]])
# Applying the filter2D() function
img = cv2.filter2D(src=image, ddepth=-1, kernel=kernel2)
# Shoeing the original and output image
cv2.imshow('Original', image)
cv2.imshow('Kernel Blur', img)
cv2.waitKey()
cv2.destroyAllWindows()
輸出:
邊檢測具有二維卷積矩陣的圖像
相關用法
- Python OpenCV setWindowTitle()用法及代碼示例
- Python OpenCV resizeWindow()用法及代碼示例
- Python OpenCV waitKey()用法及代碼示例
- Python OpenCV waitKeyEx()用法及代碼示例
- Python OpenCV getRotationMatrix2D()用法及代碼示例
- Python OpenCV destroyAllWindows()用法及代碼示例
- Python OpenCV namedWindow()用法及代碼示例
- Python OpenCV selectroi()用法及代碼示例
- Python OpenCV imdecode()用法及代碼示例
- Python OpenCV getTrackbarPos()用法及代碼示例
- Python OpenCV Canny()用法及代碼示例
- Python OpenCV setTrackbarPos()用法及代碼示例
- Python OpenCV getgaussiankernel()用法及代碼示例
- Python OpenCV haveImageReader()用法及代碼示例
注:本文由純淨天空篩選整理自sanjaysdev0901大神的英文原創作品 Python OpenCV – Filter2D() Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。