Làm thế nào để bạn nhập một hình ảnh vào python?

Khi chúng ta đối mặt với dự án thị giác máy tính, trước hết chúng ta cần tải hình ảnh trước bất kỳ quá trình tiền xử lý nào

Có nhiều thư viện khác nhau để thực hiện imread(). Ở đây tôi muốn tổng hợp các thư viện phổ biến để tải hình ảnh và sự khác biệt của chúng. Bài viết này sẽ đi qua

  1. Thư viện để tải hình ảnh
  2. kênh màu
  3. Hiệu quả
  4. cheatsheet
Thư viện để tải hình ảnh

Có bốn thư viện thường được sử dụng để tải hình ảnh

  • Matplotlib — plt.imread()
  • OpenCV — cv2.imread()
  • Gối —
    import cv2img = cv2.imread(img_dir)
    0
  • scikit-hình ảnh —
    import cv2img = cv2.imread(img_dir)
    1

import matplotlib.pyplot as pltimg = plt.imread(img_dir)

import cv2img = cv2.imread(img_dir)

from PIL import Imageimg = Image.open(img_dir)

from skimage import ioimg = io.imread(img_dir)
Kênh màu

Sau khi tải hình ảnh, thường sẽ sử dụng

import cv2img = cv2.imread(img_dir)
2 để vẽ hình ảnh. Hãy âm mưu một số doge

Bạn có thể nhận ra rằng hình ảnh OpenCV ở trên có vẻ kỳ lạ. Đó là bởi vì matplotlib, PIL và Skiage đại diện cho hình ảnh theo thứ tự RGB (Đỏ, Xanh lục, Xanh lam), trong khi OpenCV theo thứ tự ngược lại. (BGR — Xanh lam, Xanh lục, Đỏ)

Sửa chữa dễ dàng

Chỉ cần chuyển đổi hình ảnh từ BGR sang RGB bằng cách sử dụng

import cv2img = cv2.imread(img_dir)
3 trước khi vẽ sơ đồ bằng cách sử dụng
import cv2img = cv2.imread(img_dir)
4

Từ màu xanh sang màu vàng doge______9_______Hiệu quả

Vì vậy, bạn có thể hỏi cái nào là thư viện hiệu quả nhất trong việc tải hình ảnh. Ở đây một chức năng được xác định để theo dõi thời gian

import time
def test_read_image(imgfile, func):
t0 = time.time()
img = func(imgfile)
return img, time.time() - t0

Kết quả như sau

+------------+--------------+---------+
| Library | Function | Time |
+------------+--------------+---------+
| matplotlib | plt.imread() | 0.02254 |
| OpenCV | cv2.imread() | 0.01096 |
| Pillow | Image.Open() | 0.00166 |
| Skimage | io.imread() | 0.01463 |
+------------+--------------+---------+

Gối —

import cv2img = cv2.imread(img_dir)
5dường như hiệu quả nhất dựa trên kết quả. Để nghiên cứu thêm, chúng ta có thể quay lại mã nguồn để tìm hiểu thêm về sự khác biệt

cheatsheet

Tôi đã kết hợp các thông tin trên vào Jupyter Notebook. Vui lòng tải xuống cheatsheet và viết mã vui vẻ

Vì vậy, tôi sẽ giải thích cú pháp của skimage.io.imread. Tôi cũng sẽ chỉ cho bạn một ví dụ rõ ràng, từng bước về cách sử dụng chức năng này để tải hình ảnh từ một tệp

Hướng dẫn có một số phần và nếu bạn cần một cái gì đó cụ thể, bạn có thể nhấp vào liên kết thích hợp

Mục lục

Được rồi. Bắt đầu nào

Giới thiệu nhanh về Chức năng imread Skimage

Nếu bạn đang xử lý hình ảnh bằng Python, thì điều đầu tiên bạn cần làm là tải hình ảnh vào môi trường lập trình của mình

Trong Python, có một số bộ công cụ có thể giúp bạn làm điều này. Nhưng nếu bạn đang xử lý hình ảnh của mình trong bối cảnh khoa học dữ liệu và học máy, thì một trong những bộ công cụ tốt nhất để thực hiện việc này là gói Skimage

Cụ thể, bạn có thể sử dụng chức năng imread Skimage để đọc hình ảnh từ các tệp trên máy tính của mình, thành một biểu mẫu có thể sử dụng được trong chương trình Python

An image that shows how the skimage imread function loads an image file into Python.

Hàm Skimage imread sử dụng khá đơn giản, tuy nhiên để sử dụng đúng cách thì bạn cần nắm rõ cú pháp.

Trong trường hợp đó, chúng ta hãy xem cú pháp của hàm

Cú pháp đọc lướt. io. imread

Bây giờ tôi đã cung cấp cho bạn tổng quan cấp cao về chức năng của hàm imread, chúng ta hãy xem cú pháp

Hàm imread là một phần của không gian tên skimage.io. Vì vậy, chúng ta có thể gọi hàm là skimage.io.imread()

An explanation of the syntax of the skimage.io.imread function.

Hãy nhanh chóng thảo luận về một số chi tiết của chức năng

Đầu vào để đọc lướt. io. imread

Trong phần giải thích cú pháp ở trên, bạn sẽ nhận thấy một đầu vào bên trong dấu ngoặc đơn

Trong phần giải thích đó, tôi đã gọi đầu vào là “

import plotly.express as px
import skimage.io
1“

Về định dạng, đây phải là một tệp hình ảnh giống như tệp

import plotly.express as px
import skimage.io
2

Cụ thể hơn, bạn nên trình bày tên file dưới dạng chuỗi, bao gồm cả đường dẫn đến file ảnh

Vì vậy, ví dụ: nếu tệp của bạn có tên là

import plotly.express as px
import skimage.io
3 và hình ảnh nằm trong một thư mục trên máy tính của bạn,
import plotly.express as px
import skimage.io
4, thì bạn có thể gọi hàm là

skimage.io.imread('/documents/images/Lamborghini_Aventador_2018.jpg')

Lưu ý rằng đường dẫn đầy đủ và tên của tệp được đặt bên trong dấu ngoặc kép

Nếu tệp tồn tại ở một URL trên internet, bạn cũng có thể cung cấp đường dẫn URL đầy đủ và tên tệp (đính kèm bên trong dấu ngoặc kép). Nó cũng sẽ hoạt động theo cách đó. Tôi sẽ cho bạn thấy một ví dụ về điều này

thông số bổ sung

Hàm này cũng có một vài tham số tùy chọn mà bạn có thể sử dụng để sửa đổi cách hoạt động của hàm

as_gray

Tham số

import plotly.express as px
import skimage.io
5 cho phép bạn chuyển đổi hình ảnh sang thang độ xám

Đối số cho tham số này sẽ là một giá trị boolean

import plotly.express as px
import skimage.io
6 hoặc
import plotly.express as px
import skimage.io
7

Nếu

import plotly.express as px
import skimage.io
8, nó sẽ chuyển đổi hình ảnh thành thang độ xám

Tham số này là tùy chọn

Hình ảnh đã có trong thang độ xám sẽ không bị ảnh hưởng khi sử dụng tham số này

cắm vào

Tham số

import plotly.express as px
import skimage.io
9 cho phép bạn chỉ định plugin sẽ sử dụng

Chúng tôi sẽ không đề cập đến việc sử dụng tham số này trong hướng dẫn này

Đầu ra của đọc lướt. io. imread

Đầu ra của skimage.io.imread là một mảng Numpy

Kích thước của đầu ra phụ thuộc vào bảng màu được sử dụng trong hình ảnh

Nếu hình ảnh có thang độ xám, thì đầu ra sẽ là một mảng M x N (M hàng và N cột)

Nếu hình ảnh sử dụng màu RGB thì đầu ra sẽ là M x N x 3. Chiều thứ ba này sẽ chứa dữ liệu kênh màu RGB

Nếu hình ảnh sử dụng màu RGBA, thì đầu ra sẽ là M x N x 4. Chiều thứ ba này sẽ chứa dữ liệu kênh màu RGBA

Nếu bạn bối rối về mảng Numpy, bạn nên cân nhắc đăng ký khóa học của chúng tôi, Numpy Mastery. Nó giải thích mọi thứ bạn cần biết về Numpy

ví dụ. cách nhập ảnh bằng Skimage imread

Bây giờ chúng ta đã xem xét cú pháp của sklearn. io. đọc xong, hãy xem một số ví dụ về cách nhập hình ảnh vào Python

ví dụ

Chạy mã này trước

Trước khi chạy các ví dụ, bạn sẽ cần nhập một số gói và chạy một số mã sơ bộ

gói nhập khẩu

Đầu tiên chúng ta cần nhập một vài gói Python

import plotly.express as px
import skimage.io

Rõ ràng là chúng ta cần

import plotly.io as pio
pio.renderers.default = 'svg'
1 để chạy hàm
import plotly.io as pio
pio.renderers.default = 'svg'
2

Chúng tôi cũng sẽ sử dụng

import plotly.io as pio
pio.renderers.default = 'svg'
3 để thực sự trực quan hóa hình ảnh sau khi chúng tôi đã tải xong

Nếu bạn không có các gói này trên máy tính của mình, thì trước tiên bạn cần cài đặt chúng

Những ngày này, tôi cài đặt gần như tất cả các gói Python của mình qua Anaconda. Bạn có thể tham khảo thêm thông tin về cài đặt Skiage qua Anaconda tại đây. Và bạn có thể nhận thông tin về cài đặt Plotly tại đây

Thiết lập kết xuất hình ảnh

Theo mặc định, Plotly được thiết lập để hiển thị hình ảnh trong cửa sổ trình duyệt

Vì vậy, nếu bạn đang sử dụng IDE (Môi trường phát triển tích hợp) như Spyder, bạn sẽ cần thiết lập nó để hiển thị các ô từ Plotly. (Mình dùng Spyder nên cần tự làm bước này. )

Ghi chú. nếu bạn đang sử dụng Jupyter, bạn có thể bỏ qua mã này

Để thiết lập Plotly để hiển thị trực tiếp các ô của bạn trong IDE, bạn có thể chạy đoạn mã sau

import plotly.io as pio
pio.renderers.default = 'svg'

VÍ DỤ 1. Tải một hình ảnh với sklearn. io. imread

Ở đây, chúng tôi sẽ tải một tệp hình ảnh bằng Skimage imread và chúng tôi sẽ vẽ nó bằng Plotly

Tệp nằm trong một thư mục tại https. //www. phòng thí nghiệm sắc nét. com/bộ dữ liệu/hình ảnh/

Đây là mã để đọc nó trong

skimage.io.imread('https://www.sharpsightlabs.com/datasets/images/Lamborghini_Aventador_2018.jpg')

NGOÀI

array([[[ 59,  58,  54],
        [ 56,  58,  55],
        [ 56,  58,  55],
        ...,
        [ 36,  37,  39],
        [ 35,  39,  38],
        [ 31,  37,  33]],

       [[ 56,  57,  51],
        [ 55,  56,  51],
        [ 53,  53,  51],
        ...,
        [ 39,  41,  38],
        [ 39,  41,  38],
        [ 36,  41,  35]],

       [[ 54,  55,  50],
        [ 54,  55,  50],
        [ 55,  55,  53],
        ...,
        [ 35,  40,  34],
        [ 39,  41,  36],
        [ 39,  41,  36]],

       ...,

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [251, 244, 252],
        [247, 241, 251],
        [247, 244, 253]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [250, 242, 253],
        [248, 242, 252],
        [247, 246, 254]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [249, 241, 252],
        [249, 243, 253],
        [248, 247, 255]]], dtype=uint8)
Giải thích

Ở đây, chúng tôi đã tải tệp có tên

import plotly.express as px
import skimage.io
3. Tệp này tồn tại tại URL
import plotly.io as pio
pio.renderers.default = 'svg'
5

Vì vậy, để tải tệp, chúng tôi đã gọi hàm và đối số của hàm là đường dẫn URL đầy đủ và tên tệp, được đặt trong dấu ngoặc kép

Đầu ra là một mảng Numpy đa chiều

Chúng ta có thể hình dung mảng này bằng cách sử dụng chức năng Plotly imshow. Hãy chạy lại mã một chút để làm điều đó

Chúng ta có thể chèn hình ảnh bằng Python không?

Có thể chèn một đối tượng hình ảnh vào một vị trí ô nhất định của trang tính với sự trợ giúp của phương thức insert_image() . Về cơ bản, bạn phải chỉ định vị trí của ô bằng cách sử dụng bất kỳ loại ký hiệu nào và hình ảnh sẽ được chèn vào.

Làm cách nào để cài đặt hình ảnh trong Python?

PIL là tên viết tắt của Python Imaging Library và nó bổ sung tính năng xử lý ảnh cho Python. .
xcode-select -install (Bạn sẽ được nhắc cài đặt Công cụ dòng lệnh Xcode)
sudo easy_install pip
sudo pip cài đặt gối
gối cài đặt pip