Chuyển đổi hình ảnh sang python nhị phân

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ám

Hoạ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

Làm cách nào để chuyển đổi hình ảnh thành nhị phân trong Python?

Nhập thư viện cần thiết. Trong tất cả các ví dụ sau, thư viện Python bắt buộc là OpenCV. .
Đọc một hình ảnh đầu vào sử dụng cv2. imread[]. .
Bây giờ hãy chuyển đổi hình ảnh BGR này thành hình ảnh thang độ xám như bên dưới bằng cách sử dụng cv2. hàm cvtColor[]. .
Áp dụng ngưỡng cv2. .
Hiển thị hình ảnh nhị phân đã chuyển đổi

Làm cách nào để chuyển đổi hình ảnh thành nhị phân?

BW = im2bw[ I , level ] chuyển đổi hình ảnh thang độ xám I thành hình ảnh nhị phân BW , bằng cách thay thế tất cả các pixel trong hình ảnh đầu vào có độ sáng lớn hơn mức bằng giá trị 1 [ . Phạm vi này liên quan đến các mức tín hiệu có thể có đối với loại hình ảnh.

Làm cách nào để chuyển đổi hình ảnh RGB thành nhị phân trong Python?

Làm cách nào để bạn chuyển đổi RGB sang nhị phân trong Python? .
nhập numpy dưới dạng np
từ numpy nhập ngẫu nhiên
# Tạo một hình ảnh có giá trị từ 1 đến 255
im_thresh = ngẫu nhiên. randint[1,256, [64,64]]
# Đặt giá trị nhỏ hơn 255 thành 0
# Phải thực hiện trước thao tác bên dưới để không đặt tất cả các giá trị thành 0

Làm cách nào để chuyển đổi hình ảnh thành mảng nhị phân trong Python?

Để 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.

Chủ Đề