Chuyển đổi bất kỳ hình ảnh nào thành bản phác thảo bằng Python
Để tạo ra một bản phác thảo đẹp đòi hỏi rất nhiều thời gian và công sức. May mắn thay, lập trình đã phát triển nên giờ đây bạn có thể dễ dàng chuyển đổi hình ảnh và tạo ra các thiết kế đẹp mắt. Một kỹ thuật ấn tượng mà bạn có thể thực hiện là chuyển đổi hình ảnh thành bản phác thảo kỹ thuật số.
Mặc dù một bản phác thảo cơ học sẽ không giống hệt bản vẽ bút chì của riêng bạn, nhưng đầu ra vẫn đáng để thử nghiệm. Tìm hiểu cách lập trình một ứng dụng như vậy bằng mô-đun OpenCV bằng ngôn ngữ Python siêu thân thiện.
Mục Lục
Mô-đun OpenCV
OpenCV là một thư viện mã nguồn mở do Intel phát triển và duy trì về các phương pháp thị giác máy tính được sử dụng để xử lý hình ảnh và thị giác máy tính. Nó giúp người dùng dễ dàng tạo các ứng dụng được tối ưu hóa, tương tác với hình ảnh và video trong thời gian thực và chọn thuật toán lý tưởng cho nhu cầu của họ.
Một số ứng dụng phổ biến của OpenCV bao gồm nhận diện khuôn mặt, theo dõi khuôn mặt tự động trong quay phim, bộ lọc phương tiện truyền thông xã hội, nhận dạng biển số ô tô và giám sát camera quan sát. Để sử dụng mô-đun OpenCV trong Python, hãy mở thiết bị đầu cuối của bạn và nhập lệnh sau:
pip install opencv-python
Cách chuyển đổi bất kỳ hình ảnh nào thành bản phác thảo bằng Python
Để chuyển đổi hình ảnh yêu thích của bạn thành bản phác thảo kỹ thuật số, hãy bắt đầu bằng cách đặt nó vào cùng thư mục với chương trình Python mới để dễ dàng tham khảo. Sau đó, bắt đầu xây dựng chương trình của bạn bằng các bước sau.
Mã ví dụ này có sẵn trong kho lưu trữ GitHub và bạn được sử dụng miễn phí theo Giấy phép MIT.
Bước đầu tiên là nhập mô-đun OpenCV vào môi trường của bạn. Khi đã có OpenCV, bạn có thể sử dụng chức năng của nó để thực hiện các nhiệm vụ khác nhau. Chuyển đường dẫn của tệp hình ảnh của bạn vào imread() chức năng để tải nó. Lưu trữ hình ảnh của bạn trong một biến—được gọi là hình ảnh1 đây—để tham khảo trong tương lai.
Lưu trữ tiêu đề của cửa sổ trong một biến có tên window_name. Điều này sẽ hữu ích khi bạn chọn hiển thị hình ảnh bằng cách sử dụng imshow() hàm số. Chức năng này yêu cầu hai tham số: tiêu đề và hình ảnh bạn muốn hiển thị.
import cv2image1 = cv2.imread('image.jpg')
window_name = 'Actual image'
cv2.imshow(window_name, image1)
Sau khi có hình ảnh mong muốn, bạn cần thực hiện năm thao tác để biến nó thành một bản phác thảo. Đầu tiên, chuyển đổi hình ảnh màu thành thang độ xám. Bạn có thể làm như vậy với cvtColor() hàm số. Hàm này lấy hình ảnh có màu bạn muốn thay đổi và mã chuyển đổi, chẳng hạn như MÀU_BGR2XÁM.
grey_img = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
Khi bạn có một hình ảnh thang độ xám, hãy đảo ngược màu sắc của nó. Tại thời điểm này, bạn cần hiểu cách máy tính tạo thành một hình ảnh. Một hình ảnh bao gồm nhiều pixel nhỏ với cường độ khác nhau. Trong ảnh màu, mỗi pixel chứa các thành phần màu đỏ, lục và lam, mỗi thành phần có cường độ thay đổi từ 0 đến 255.
Trong ảnh thang độ xám, chỉ có các sắc độ xám, do đó, cường độ của pixel thay đổi trong khoảng từ 0 đến 1. Để đảo ngược cường độ pixel của ảnh này, chuyển ảnh thang độ xám sang bitwise_not() hàm số.
Như tên gợi ý, chức năng này đảo ngược giá trị của mỗi pixel thành tương đương bổ sung của nó. Tất cả các pixel lớn hơn 0 được đặt thành 0 và tất cả các pixel bằng 0 được đặt thành 255.
invert = cv2.bitwise_not(grey_img)
Sau khi đảo ngược cường độ điểm ảnh, bạn có thể làm mịn hình ảnh với sự trợ giúp của Gaussian Blur. Quá trình Gaussian Blur sử dụng bộ lọc Gaussian. Bộ lọc Gaussian là bộ lọc thông thấp chỉ cho phép tần số thấp đi qua, loại bỏ thành phần tần số cao của tín hiệu hoặc hình ảnh.
OpenCV GaussianBlur() chức năng chấp nhận bốn tham số. Đây là một đối tượng ma trận đóng vai trò là hình ảnh nguồn, ksize (kích thước của hạt nhân) và sigmaX (độ lệch chuẩn hạt nhân Gaussian).
Giả sử bạn có một bức ảnh vật lý trong tay. Nếu bạn muốn làm mờ nó, bạn có thể dán các miếng sáp hoặc giấy da lên trên nó. Bạn có thể tưởng tượng hạt nhân giống như mảnh giấy trong suốt này. Về mặt kỹ thuật số, điều này xảy ra hơi khác một chút. Để làm mờ, làm sắc nét và áp dụng các hiệu ứng khác trên hình ảnh kỹ thuật số, bạn nhân một ma trận với cường độ pixel của hình ảnh.
Ksize luôn là một số lẻ dương. Khi bạn tăng kích thước hạt nhân, độ mờ tăng lên. Để hiểu sigmaX, giả sử bạn đang bôi sáp lên giấy. Khi bạn bôi sáp, giấy trở nên trong mờ đồng nhất. Tương tự, bạn phải giữ các giá trị của hạt nhân gần với một điểm cụ thể (giá trị trung bình). Giá trị sigmaX xác định sự khác biệt giữa giá trị trung bình và giá trị khác của pixel trong ảnh.
Chuyển hình ảnh đảo ngược, kích thước hạt nhân là (21, 21) và độ lệch chuẩn 0 cho hàm Gaussian Blur:
blur = cv2.GaussianBlur(invert, (21, 21), 0)
Truyền lại hình ảnh bị mờ cho hàm bitwise_not() để đảo ngược nó:
invertedblur = cv2.bitwise_not(blur)
Cuối cùng, sử dụng chia() chức năng và để thực hiện phân chia theo từng phần tử của mảng ảnh thang độ xám và mảng ảnh mờ đảo ngược với tỷ lệ 256.
sketch = cv2.divide(grey_img, invertedblur, scale=256.0)
Về cơ bản, hàm thực hiện thao tác sau:
def divide(grey_img, b, invertedblur=256.0):
return (grey_img * scale) / invertedblur
Lưu trữ kết quả trong một biến có tên sketch. Để lưu hình ảnh cuối cùng, hãy chuyển tên cho tệp đầu ra của bạn và hình ảnh phác thảo vào imwrite() hàm số. Để xác minh, bạn có thể sử dụng hàm imread() để tải hình ảnh phác thảo đã lưu, đặt tiêu đề cửa sổ và hiển thị nó bằng hàm imshow().
Sử dụng phím chờ() bằng cách chuyển 0 để hiển thị cửa sổ ảnh gốc và cửa sổ phác thảo được tạo cho đến khi bạn nhấn bất kỳ phím nào.
cv2.imwrite("sketch.jpeg", sketch)
image = cv2.imread("sketch.jpeg")
window_name ='Sketch image'
cv2.imshow(window_name, image)
cv2.waitKey(0)
Mang tất cả mã lại với nhau và bạn đã sẵn sàng cho chương trình của mình.
Đầu ra mẫu của việc chuyển đổi hình ảnh thành bản phác thảo bằng chương trình Python này
Bạn có thể chọn một hình ảnh phong cảnh đẹp và chạy nó thông qua chương trình để tạo bản phác thảo kỹ thuật số tuyệt đẹp này.
Trên ảnh chân dung, chương trình tạo bản phác thảo kỹ thuật số sau.
Bạn có thể thử nghiệm các tham số của chức năng theo ý thích của mình để tạo bản phác thảo kỹ thuật số mong muốn.
Xử lý hình ảnh và thị giác máy tính
Xử lý hình ảnh và thị giác máy tính là hai lĩnh vực công nghệ có liên quan mật thiết với nhau. Cả hai đều liên quan đến việc thay đổi hình ảnh kỹ thuật số để đạt được kết quả mong muốn. Xử lý hình ảnh tập trung vào việc cải thiện hình ảnh, trong khi thị giác máy tính tìm kiếm các mẫu và đối tượng trong hình ảnh để hiểu nó.
Scikit-image là một thư viện Python khác cung cấp nhiều chức năng xử lý hình ảnh. Nó có một số mô-đun, bộ lọc, lớp, phép biến đổi được biên dịch sẵn, v.v. Nếu đang tìm kiếm một mô-đun để sử dụng cho các mô hình học sâu như CNN và RNN, bạn có thể muốn khám phá Torchvision.