Các bộ lọc trong xử lý ảnh

Bài viết này sẽ giới thiệu cách sử dụng tích chập trong OpenCV và một số bộ lọc cơ bản để thực hiện lọc hình ảnh ví dụ như làm mờ hoặc tăng độ sắc nét cho ảnh gốc.

Bài viết gồm các nội dung chính sau:

1. Giới thiệu về mặt nạ tích chập [convolution kernel] trong xử lý ảnh

2. Sử dụng mặt nạ để làm mờ hoặc tăng độ nét của ảnh

3. Sử dụng mặt nạ đồng nhất [Identity Kernel] trong OpenCV

4. Làm mờ ảnh [blurring] sử dụng mặt nạ tích chập 2D tùy biến

5. Làm mờ ảnh sử dụng hàm có sẵn trong OpenCV

6. Áp dụng bộ lọc Gauss để làm mờ ảnh

7. Áp dụng bộ lọc trung vị [Median] để làm mờ ảnh

8. Tăng độ nét [Sharpening] của ảnh bằng mặt nạ tích chập 2D tùy biến

9. Áp dụng lọc song phương [Bilateral Filter] trong OpenCV

Trước khi bắt đầu vào từng phần cụ thể, hãy quan sát đoạn code mẫu dùng để lọc ảnh. Chi tiết chức năng từng đoạn code sẽ được giới thiệu ở các phần tương ứng.

Python

import cv2
import numpy as np

image = cv2.imread['test.jpg']

# Print error message if image is null
if image is None:
    print['Could not read image']

# Apply identity kernel
kernel1 = np.array[[[0, 0, 0],
                    [0, 1, 0],
                    [0, 0, 0]]]

identity = cv2.filter2D[src=image, ddepth=-1, kernel=kernel1]

cv2.imshow['Original', image]
cv2.imshow['Identity', identity]
    
cv2.waitKey[]
cv2.imwrite['identity.jpg', identity]
cv2.destroyAllWindows[]

# Apply blurring kernel
kernel2 = np.ones[[5, 5], np.float32] / 25
img = cv2.filter2D[src=image, ddepth=-1, kernel=kernel2]

cv2.imshow['Original', image]
cv2.imshow['Kernel Blur', img]
    
cv2.waitKey[]
cv2.imwrite['blur_kernel.jpg', img]
cv2.destroyAllWindows[]

C++

// Import dependencies
#include 
#include 

// Using namespaces to nullify use of c::function[]; syntax and std::function[]; syntax
using namespace std;
using namespace cv;

int main[]
{
    // Read Image
    Mat image = imread["test.jpg"];

    // Print Error message if image is null
    if [image.empty[]] 
        {
            cout 

Chủ Đề