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
- Thư viện để tải hình ảnh
- kênh màu
- Hiệu quả
- cheatsheet
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 timedef 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
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
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()
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_grayTham 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àoTham 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.ioRõ 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 ảnhTheo 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('//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 đó