Cách nhập hình ảnh trong python

Đầu tiên, hãy bắt đầu IPython. Đây là một cải tiến tuyệt vời nhất cho dấu nhắc Python tiêu chuẩn và nó liên kết đặc biệt tốt với Matplotlib. Bắt đầu IPython trực tiếp tại shell hoặc với Jupyter Notebook [trong đó IPython là kernel đang chạy]

Khi IPython đã bắt đầu, bây giờ chúng ta cần kết nối với vòng lặp sự kiện GUI. Điều này cho IPython biết vị trí [và cách thức] hiển thị các ô. Để kết nối với vòng lặp GUI, hãy thực thi phép thuật %matplotlib tại dấu nhắc IPython của bạn. Có nhiều chi tiết hơn về chính xác điều này thực hiện tại tài liệu của IPython trên các vòng lặp sự kiện GUI

Nếu bạn đang sử dụng Jupyter Notebook, các lệnh tương tự cũng có sẵn, nhưng mọi người thường sử dụng một đối số cụ thể cho ma thuật %matplotlib

In [1]: %matplotlib inline

Thao tác này sẽ bật tính năng vẽ sơ đồ nội tuyến, nơi đồ họa sơ đồ sẽ xuất hiện trong sổ ghi chép của bạn. Điều này có ý nghĩa quan trọng đối với tính tương tác. Đối với biểu đồ nội tuyến, các lệnh trong các ô bên dưới ô tạo ra biểu đồ sẽ không ảnh hưởng đến biểu đồ. Ví dụ: không thể thay đổi bản đồ màu từ các ô bên dưới ô tạo biểu đồ. Tuy nhiên, đối với các chương trình phụ trợ khác, chẳng hạn như Qt, mở một cửa sổ riêng, các ô bên dưới các ô tạo biểu đồ sẽ thay đổi biểu đồ - đó là một đối tượng trực tiếp trong bộ nhớ

Hướng dẫn này sẽ sử dụng giao diện đồ thị ẩn của Matplotlib, pyplot. Giao diện này duy trì trạng thái toàn cầu và rất hữu ích để thử nghiệm nhanh chóng và dễ dàng với các cài đặt cốt truyện khác nhau. Phương án thay thế là rõ ràng, phù hợp hơn để phát triển ứng dụng lớn. Để biết giải thích về sự đánh đổi giữa giao diện ẩn và rõ ràng, hãy xem Giao diện ứng dụng Matplotlib [API]Bắt đầu nhanh . Bây giờ, hãy tiếp tục với cách tiếp cận ngầm. to start using the explicit interface. For now, let's get on with the implicit approach:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

Nhập dữ liệu hình ảnh vào mảng Numpy#

Matplotlib dựa vào thư viện Gối để tải dữ liệu hình ảnh

Đây là hình ảnh chúng ta sẽ chơi với

mpimg.imread['../../doc/_static/stinkbug.png'] print[img]

[[[0.40784314 0.40784314 0.40784314]
  [0.40784314 0.40784314 0.40784314]
  [0.40784314 0.40784314 0.40784314]
  ...
  [0.42745098 0.42745098 0.42745098]
  [0.42745098 0.42745098 0.42745098]
  [0.42745098 0.42745098 0.42745098]]

 [[0.4117647  0.4117647  0.4117647 ]
  [0.4117647  0.4117647  0.4117647 ]
  [0.4117647  0.4117647  0.4117647 ]
  ...
  [0.42745098 0.42745098 0.42745098]
  [0.42745098 0.42745098 0.42745098]
  [0.42745098 0.42745098 0.42745098]]

 [[0.41960785 0.41960785 0.41960785]
  [0.41568628 0.41568628 0.41568628]
  [0.41568628 0.41568628 0.41568628]
  ...
  [0.43137255 0.43137255 0.43137255]
  [0.43137255 0.43137255 0.43137255]
  [0.43137255 0.43137255 0.43137255]]

 ...

 [[0.4392157  0.4392157  0.4392157 ]
  [0.43529412 0.43529412 0.43529412]
  [0.43137255 0.43137255 0.43137255]
  ...
  [0.45490196 0.45490196 0.45490196]
  [0.4509804  0.4509804  0.4509804 ]
  [0.4509804  0.4509804  0.4509804 ]]

 [[0.44313726 0.44313726 0.44313726]
  [0.44313726 0.44313726 0.44313726]
  [0.4392157  0.4392157  0.4392157 ]
  ...
  [0.4509804  0.4509804  0.4509804 ]
  [0.44705883 0.44705883 0.44705883]
  [0.44705883 0.44705883 0.44705883]]

 [[0.44313726 0.44313726 0.44313726]
  [0.4509804  0.4509804  0.4509804 ]
  [0.4509804  0.4509804  0.4509804 ]
  ...
  [0.44705883 0.44705883 0.44705883]
  [0.44705883 0.44705883 0.44705883]
  [0.44313726 0.44313726 0.44313726]]]

Lưu ý dtype ở đó - float32. Matplotlib đã thay đổi tỷ lệ dữ liệu 8 bit từ mỗi kênh thành dữ liệu dấu phẩy động trong khoảng từ 0. 0 và 1. 0. Xin lưu ý thêm, kiểu dữ liệu duy nhất mà Gối có thể hoạt động là uint8. Biểu đồ Matplotlib có thể xử lý float32 và uint8, nhưng việc đọc/ghi hình ảnh cho bất kỳ định dạng nào khác ngoài PNG bị giới hạn ở dữ liệu uint8. Tại sao 8 bit? . Tại sao họ chỉ có thể hiển thị 8 bit/kênh? . Thêm ở đây [từ quan điểm nhiếp ảnh]. Hướng dẫn độ sâu bit Phong cảnh sáng

Mỗi danh sách bên trong đại diện cho một pixel. Ở đây, với một ảnh RGB, có 3 giá trị. Vì là ảnh đen trắng nên R, G, B đều giống nhau. Một RGBA [trong đó A là alpha hoặc độ trong suốt] có 4 giá trị cho mỗi danh sách bên trong và hình ảnh độ chói đơn giản chỉ có một giá trị [và do đó chỉ là mảng 2 chiều, không phải mảng 3 chiều]. Đối với hình ảnh RGB và RGBA, Matplotlib hỗ trợ các kiểu dữ liệu float32 và uint8. Đối với thang độ xám, Matplotlib chỉ hỗ trợ float32. Nếu dữ liệu mảng của bạn không đáp ứng một trong những mô tả này, bạn cần thay đổi kích thước của nó

Vẽ mảng numpy dưới dạng hình ảnh #

Vì vậy, bạn có dữ liệu của mình trong một mảng có nhiều mảng [bằng cách nhập dữ liệu hoặc bằng cách tạo dữ liệu đó]. Hãy kết xuất nó. Trong Matplotlib, điều này được thực hiện bằng hàm

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
5. Ở đây chúng ta sẽ lấy đối tượng cốt truyện. Đối tượng này cung cấp cho bạn một cách dễ dàng để thao tác biểu đồ từ dấu nhắc

imgplot = plt.imshow[img]

lum_img = img[:, :, 0] plt.imshow[lum_img]

plt.imshow[lum_img, cmap="hot"]

imgplot = plt.imshow[lum_img] imgplot.set_cmap['nipy_spectral']

Ghi chú

Tuy nhiên, hãy nhớ rằng trong Jupyter Notebook với chương trình phụ trợ nội tuyến, bạn không thể thay đổi các ô đã được hiển thị. Nếu bạn tạo imgplot ở đây trong một ô, bạn không thể gọi set_cmap[] trên nó trong ô sau và mong đợi biểu đồ trước đó thay đổi. Đảm bảo rằng bạn nhập các lệnh này cùng nhau trong một ô. lệnh plt sẽ không thay đổi các ô từ các ô trước đó

Có nhiều lược đồ colormap khác có sẵn. Xem danh sách và hình ảnh của các bản đồ màu

Tham chiếu thang màu #

Thật hữu ích khi có ý tưởng về giá trị mà một màu đại diện. Chúng tôi có thể làm điều đó bằng cách thêm một thanh màu vào hình của bạn

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
0

Kiểm tra một phạm vi dữ liệu cụ thể#

Đôi khi bạn muốn nâng cao độ tương phản trong hình ảnh của mình hoặc mở rộng độ tương phản ở một vùng cụ thể trong khi hy sinh chi tiết ở những màu không thay đổi nhiều hoặc không quan trọng. Một công cụ tốt để tìm các vùng thú vị là biểu đồ. Để tạo biểu đồ dữ liệu hình ảnh của chúng tôi, chúng tôi sử dụng chức năng

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
7

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
2

Thông thường, phần "thú vị" của hình ảnh nằm xung quanh đỉnh và bạn có thể có thêm độ tương phản bằng cách cắt bớt các vùng bên trên và/hoặc bên dưới đỉnh. Trong biểu đồ của chúng tôi, có vẻ như không có nhiều thông tin hữu ích ở cấp cao [không có nhiều thứ màu trắng trong ảnh]. Hãy điều chỉnh giới hạn trên để chúng ta "phóng to" một phần của biểu đồ một cách hiệu quả. Chúng tôi làm điều này bằng cách chuyển đối số clim tới imshow. Bạn cũng có thể thực hiện việc này bằng cách gọi phương thức

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
8 của đối tượng sơ đồ hình ảnh, nhưng hãy đảm bảo rằng bạn làm như vậy trong cùng một ô với lệnh vẽ của bạn khi làm việc với Jupyter Notebook - nó sẽ không thay đổi các sơ đồ từ các ô trước đó

Bạn có thể chỉ định leo núi trong lệnh gọi tới ________ 19

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
0

Bạn cũng có thể chỉ định khí hậu bằng cách sử dụng đối tượng được trả về

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
1

Lược đồ nội suy mảng#

Nội suy tính toán màu sắc hoặc giá trị của pixel "nên" theo các sơ đồ toán học khác nhau. Một nơi phổ biến mà điều này xảy ra là khi bạn thay đổi kích thước hình ảnh. Số lượng pixel thay đổi, nhưng bạn muốn có cùng thông tin. Vì các pixel rời rạc nên thiếu không gian. Nội suy là cách bạn lấp đầy không gian đó. Đây là lý do tại sao hình ảnh của bạn đôi khi trông giống như pixel khi bạn phóng to chúng. Hiệu ứng rõ rệt hơn khi sự khác biệt giữa ảnh gốc và ảnh mở rộng càng lớn. Hãy lấy hình ảnh của chúng tôi và thu nhỏ nó. Chúng tôi đang loại bỏ pixel một cách hiệu quả, chỉ giữ lại một số pixel được chọn. Bây giờ khi chúng tôi vẽ đồ thị, dữ liệu đó sẽ tăng lên theo kích thước trên màn hình của bạn. Các pixel cũ không còn ở đó nữa và máy tính phải vẽ các pixel để lấp đầy khoảng trống đó

Chúng tôi sẽ sử dụng thư viện Gối mà chúng tôi đã sử dụng để tải hình ảnh để thay đổi kích thước hình ảnh

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
2

Ở đây chúng ta có phép nội suy mặc định, song tuyến tính, vì chúng ta không đưa ra bất kỳ đối số nội suy nào cho

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
5

Hãy thử một số khác. Đây là "gần nhất", không nội suy

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
3

và lập phương

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
4

Phép nội suy hai khối thường được sử dụng khi phóng to ảnh - mọi người có xu hướng thích mờ hơn pixel

Chủ Đề