Tôi đã sử dụng đối số 'LA' và nhận được hình ảnh thang độ xám mà tôi đã vẽ. Tôi không biết tại sao chỉ có chữ 'L' không hoạt động khi tôi nhận được hình ảnh tối
image_gray = image.convert['LA']
Ảnh thang xám có hai chiều i. e. , hai ma trận [hàng x cột x 2]. Tôi có thể vẽ nó, nó trông giống như một hình ảnh thang độ xám. Bây giờ tôi cần nhị phân hóa nó với ngưỡng và vẽ biểu đồ. Tôi biết lý thuyết nhưng không thể tìm thấy chức năng nào trong python có thể chuyển đổi hình ảnh tỷ lệ xám thành nhị phân và sau đó tạo biểu đồ của nó
Một hình ảnh để chuyển đổi nhị phân- Chuyển đổi hình ảnh thành tệp nhị phân
- Chuyển đổi tệp nhị phân thành tệp hình ảnh
Làm thế nào để sử dụng?
Chuyển đổi tệp hình ảnh thành tệp nhị phân
python image_to_binary.py YOURIMAGENAME.png
Chuyển đổi tệp nhị phân thành tệp hình ảnh
python binary_to_image.py YOURBINARYFILENAME.bin
câu hỏi thường gặp
- Hoạt động tốt nhất với png -files tại thời điểm này
- Đã thử nghiệm với Python 2. 7 và Trăn 3. 6
Trong bài viết này, chúng ta sẽ tìm hiểu cách nhị phân hóa một hình ảnh bằng NumPy và tất nhiên, chúng ta sẽ sử dụng OpenCV để đọc hình ảnh ở cả thang độ xám và RGB
Để hiểu nhị phân là gì - nhị phân là thứ được tạo thành từ hai thứ. Trong thuật ngữ máy tính, nhị phân chỉ là 0 và 1. Nếu chúng ta liên hệ giống nhau trong các hình ảnh, nó được cho là hình ảnh đen trắng trong đó -
- 0 biểu thị Đen
- 1 nghĩa là Trắng
Ở giai đoạn đầu của việc học xử lý ảnh, chúng ta thường nghĩ ảnh thang độ xám là ảnh nhị phân. Mặc dù nó không phải là. Nhưng dần dần khi chúng tôi bắt đầu chủ đề, chúng tôi nhận ra mình đã sai như thế nào. Vì vậy, tiếp tục, chúng ta sẽ tìm hiểu cách nhị phân hóa hình ảnh bằng cả việc sử dụng thư viện và không sử dụng thư viện [NumPy được sử dụng cho các hoạt động ma trận chỉ để tránh sự chậm chạp của chương trình khi sử dụng các vòng lặp for thông thường]. Bên cạnh đó, chúng tôi cũng sẽ sử dụng Matplotlib để vẽ kết quả
Tổng quan về RGB và thang độ xámHoạt động nhị phân hoạt động thực sự tốt cho các hình ảnh thang độ xám. Vấn đề với hình ảnh màu [RGB] là mỗi pixel là một vectơ đại diện cho 3 giá trị duy nhất, một cho Đỏ, một cho Xanh lục và một cho Xanh lam
Một ma trận hình ảnh thang độ xám điển hình sẽ giống như -
array[[[162, 162, 162, ..., 170, 155, 128],
[162, 162, 162, ..., 170, 155, 128],
[162, 162, 162, ..., 170, 155, 128],
...,
[ 43, 43, 50, ..., 104, 100, 98],
[ 44, 44, 55, ..., 104, 105, 108],
[ 44, 44, 55, ..., 104, 105, 108]], dtype=uint8]
Một ma trận hình ảnh RGB điển hình sẽ giống như -
array[[[[226, 137, 125], ..., [200, 99, 90]],
[[226, 137, 125], ..., [200, 99, 90]],
[[226, 137, 125], ..., [200, 99, 90]],
...,
[[ 84, 18, 60], ..., [177, 62, 79]],
[[ 82, 22, 57], ..., [185, 74, 81]],
[[ 82, 22, 57], ..., [185, 74, 81]]], dtype=uint8]
Nếu chúng ta tách các pixel R, G và B khỏi ma trận trên. Chúng tôi nhận được
ma trận R
array[[[226, 226, 223, ..., 230, 221, 200],
[226, 226, 223, ..., 230, 221, 200],
[226, 226, 223, ..., 230, 221, 200],
...,
[ 84, 84, 92, ..., 173, 172, 177],
[ 82, 82, 96, ..., 179, 181, 185],
[ 82, 82, 96, ..., 179, 181, 185]], dtype=uint8]
ma trận G
array[[[137, 137, 137, ..., 148, 130, 99],
[137, 137, 137, ..., 148, 130, 99],
[137, 137, 137, ..., 148, 130, 99],
...,
[ 18, 18, 27, ..., 73, 68, 62],
[ 22, 22, 32, ..., 70, 71, 74],
[ 22, 22, 32, ..., 70, 71, 74]], dtype=uint8]
ma trận B
array[[[125, 125, 133, ..., 122, 110, 90],
[125, 125, 133, ..., 122, 110, 90],
[125, 125, 133, ..., 122, 110, 90],
...,
[ 60, 60, 58, ..., 84, 76, 79],
[ 57, 57, 62, ..., 79, 81, 81],
[ 57, 57, 62, ..., 79, 81, 81]], dtype=uint8]
Bất kỳ thao tác nào chúng ta tính toán trên hình ảnh thang độ xám, chúng ta sẽ cần tính toán tương tự trên hình ảnh RGB nhưng trong 3 lần tách các pixel R, G và B và cuối cùng hợp nhất chúng thành một hình ảnh RGB thích hợp
Thời gian để viết mã
Các gói mà chúng tôi chủ yếu sử dụng là -
- NumPy
- Matplotlib
- OpenCV
Hình ảnh của tác giả
Nhập các gói
đọc hình ảnh
Hàm trên đọc hình ảnh ở thang độ xám hoặc RGB và trả về ma trận hình ảnh
Triển khai mã với thư viện
Để chuyển đổi hình ảnh thành hình ảnh nhị phân, chúng ta chỉ cần sử dụng phương thức ngưỡng [] có sẵn trong thư viện cv2. Phương pháp này, bất kể hình ảnh là gì [thang độ xám hoặc RGB] sẽ chuyển đổi thành nhị phân. Phải mất 4 đối số được sử dụng
- src → Về cơ bản nó là ma trận hình ảnh
- thresh → Đó là giá trị ngưỡng dựa trên các pixel được cung cấp một giá trị mới. Nếu các pixel nhỏ hơn giá trị này, chúng tôi sẽ đánh giá lại các pixel đó thành 255. Nếu không, các pixel sẽ được đánh giá lại thành 0
- maxval → Đó là giá trị pixel tối đa mà một hình ảnh điển hình có thể chứa [255]
- loại → Về cơ bản, đây là loại ngưỡng được cung cấp và dựa trên loại đó, thao tác được tính toán. Có một số loại mà hoạt động được chăm sóc
Sau đó, chúng tôi sẽ vẽ kết quả để xem biến thể và do đó hàm bên dưới
Hãy kiểm tra chức năng trên —
Hình ảnh của tác giả
Hình ảnh của tác giả
Bây giờ chúng ta đã thấy kết quả của cả hình ảnh gốc và hình ảnh nhị phân, rõ ràng là mã thư viện hoạt động cho cả hai. Đã đến lúc làm bẩn tay chúng ta để viết mã giống nhau từ đầu
Triển khai mã từ đầu
Đầu tiên, chúng ta sẽ viết một hàm sẽ đánh giá lại các giá trị pixel nhỏ hơn ngưỡng đã chỉ định thành 255
Bằng cách đó, chúng ta sẽ thấy một cái gì đó như dưới đây -
Chúng tôi sẽ gọi hàm trên ba lần bằng cách tách các giá trị R, G và B và cuối cùng hợp nhất giống nhau để thu được hình ảnh nhị phân. Sau khi thực hiện, chúng ta có thể vẽ kết quả giống như cách chúng ta đã làm trước đây
Chúng tôi đã tạo mã nhị phân của mình chỉ bằng cách sử dụng NumPy. Hãy kiểm tra tương tự -
Hình ảnh của tác giả
Hình ảnh của tác giả
Đây chính là nó. Bất cứ điều gì chúng tôi muốn hoàn thành, chúng tôi đã hoàn thành nó. Kết quả khá giống với kết quả chúng tôi nhận được bằng cách sử dụng mã thư viện