Trong quá trình xử lý hình ảnh, chúng ta cần thay đổi kích thước hình ảnh để thực hiện các thao tác cụ thể. Hình ảnh thường được lưu trữ trong Numpy ndarray (mảng). Ndarray.shape được sử dụng để lấy kích thước của hình ảnh. Chúng ta có thể lấy chiều rộng, chiều cao và số kênh cho mỗi pixel bằng cách sử dụng chỉ số của biến thứ nguyên.
Các bài viết liên quan:
Tại sao cần thay đổi kích thước hình ảnh?
Thay đổi kích thước hình ảnh là một hoạt động phổ biến trong xử lý ảnh và có nhiều lý do để thực hiện điều này:
- Hiển thị tốt trên các thiết bị khác nhau: Kích thước màn hình của các thiết bị đa dạng như máy tính, điện thoại di động và máy tính bảng khác nhau. Thay đổi kích thước hình ảnh giúp đảm bảo rằng hình ảnh sẽ hiển thị đẹp và phù hợp trên các thiết bị này mà không bị méo hay bị cắt bớt phần quan trọng.
- Tăng tốc độ tải trang: Kích thước lớn của hình ảnh có thể làm giảm tốc độ tải trang, đặc biệt trên các kết nối mạng chậm hoặc thiết bị có phần cứng yếu. Thay đổi kích thước hình ảnh giúp giảm dung lượng file và cải thiện tốc độ tải trang, cung cấp trải nghiệm người dùng tốt hơn và tăng khả năng tương tác trên trang web.
- Tiết kiệm lưu trữ và băng thông: Kích thước lớn của hình ảnh có thể chiếm nhiều không gian lưu trữ và tăng tiêu thụ băng thông khi người dùng truy cập vào trang web. Thay đổi kích thước hình ảnh giúp giảm dung lượng file, tiết kiệm lưu trữ và giảm tải trọng băng thông của trang web.
- Tương thích với các yêu cầu kỹ thuật: Có thể có các yêu cầu kỹ thuật cụ thể về kích thước hình ảnh cho một ứng dụng hoặc một nền tảng cụ thể. Thay đổi kích thước hình ảnh giúp đáp ứng các yêu cầu này và đảm bảo tính tương thích của hình ảnh với hệ thống hoặc ứng dụng mà nó được sử dụng.
Tóm lại, thay đổi kích thước hình ảnh là một hoạt động quan trọng để đảm bảo hiển thị đẹp, tối ưu hóa tốc độ tải trang và tăng tính tương thích của hình ảnh trên các thiết bị và nền tảng khác nhau.
Xem thêm OpenCV là gì? tìm hiểu OpenCV
Cách thực hiện thay đổi kích thước hình ảnh bằng OpenCV
Để thực hiện thay đổi kích thước hình ảnh bằng OpenCV, bạn có thể sử dụng các hàm và phương thức của thư viện này. Dưới đây là một ví dụ về cách thực hiện điều này trong Python:
import cv2 # Đọc hình ảnh từ tệp image = cv2.imread("input.jpg") # Thay đổi kích thước hình ảnh new_width = 800 new_height = 600 resized_image = cv2.resize(image, (new_width, new_height)) # Lưu hình ảnh đã thay đổi kích thước cv2.imwrite("output.jpg", resized_image)
Trong ví dụ trên, chúng ta sử dụng hàm cv2.imread()
để đọc hình ảnh từ tệp. Sau đó, sử dụng hàm cv2.resize()
để thay đổi kích thước hình ảnh. Chúng ta truyền vào đối số đầu tiên là hình ảnh gốc, và đối số thứ hai là kích thước mới mong muốn (theo độ rộng và chiều cao). Cuối cùng, chúng ta sử dụng cv2.imwrite()
để lưu hình ảnh đã thay đổi kích thước vào tệp.
Lưu ý rằng OpenCV cung cấp nhiều phương thức khác để thay đổi kích thước hình ảnh, ví dụ như cv2.resize()
có thể chấp nhận tham số fx
và fy
để thay đổi tỉ lệ kích thước mà không cần chỉ định kích thước cụ thể. Bạn có thể tùy chỉnh ví dụ trên hoặc tìm hiểu thêm trong tài liệu OpenCV để thích nghi với nhu cầu cụ thể của mình.
Xem thêm Kích thước của page table trong hệ điều hành
Ví dụ thay đổi kích thước hình ảnh
Ví dụ 1:
Đầu ra:
Thay đổi kích thước của hình ảnh có nghĩa là thay đổi kích thước của hình ảnh, chiều rộng hoặc chiều cao của hình ảnh cũng như cả hai. Ngoài ra, tỷ lệ khung hình của hình ảnh gốc có thể được giữ lại bằng cách thay đổi kích thước hình ảnh. OpenCV cung cấp hàm cv2.resize () để thay đổi kích thước hình ảnh. Cú pháp được đưa ra là:
Thông số
- src – nguồn / hình ảnh đầu vào (bắt buộc).
- dsize – kích thước mong muốn cho hình ảnh đầu ra (bắt buộc)
- fx – Hệ số tỷ lệ dọc theo trục hoành. (tùy chọn)
- fy – Hệ số tỷ lệ dọc theo trục tung.
- Interpolation (tùy chọn) – Flag này sử dụng các phương pháp sau:
- INTER_NEAREST – A nearest-interpolation INTER_AREA – lấy mẫu lại bằng cách sử dụng quan hệ vùng pixel.
- INTER_CUBIC – Phép nội suy hai chiều trên vùng lân cận 4 × 4 pixel.
- INTER_LANCOZS4 – Nội suy Lanczos trên vùng lân cận 8 × 8 pixel
Ví dụ 2:
Có một số cách để thay đổi kích thước hình ảnh. Dưới đây là một số ví dụ để thực hiện thao tác thay đổi kích thước:
- Giữ lại tỷ lệ khung hình (tỷ lệ chiều cao trên chiều rộng của hình ảnh được giữ lại)
- Downscale (Giảm kích thước của hình ảnh)
- Nâng cấp (Tăng kích thước của hình ảnh)
- Không bảo toàn Tỷ lệ khung hình
- Chỉ thay đổi kích thước chiều rộng
- Chỉ thay đổi kích thước chiều cao
- Thay đổi kích thước chiều rộng và chiều cao được chỉ định, Giữ nguyên tỷ lệ khung hình
Downscale with resize()
Đầu ra:
Trong ví dụ trên, biến scale_per chứa phần trăm hình ảnh cần được chia tỷ lệ. Giá trị <100 được sử dụng để giảm tỷ lệ hình ảnh được cung cấp. Chúng tôi sẽ sử dụng giá trị scale_per này cùng với kích thước của hình ảnh gốc để tính chiều rộng và chiều cao của hình ảnh đầu ra.
Xem thêm Cài đặt OpenCV: Hướng dẫn chi tiết
Upscale with resize()
Đầu ra:
Thay đổi tỉ lệ khung hình
+ Chỉ thay đổi kích thước chiều rộng
Trong ví dụ dưới đây, chúng tôi đã cung cấp một giá trị cụ thể theo pixel cho chiều rộng và chiều cao sẽ không bị ảnh hưởng.
Đầu ra:
Xem thêm Background-size trong CSS
Thay đổi kích thước chiều cao
Trong ví dụ dưới đây, giá trị scale_per chứa phần trăm chiều cao phải được chia tỷ lệ hoặc chúng tôi có thể cung cấp giá trị cụ thể bằng pixel.
Đầu ra:
Thay đổi kích thước chiều rộng và chiều cao cụ thể
Đầu ra:
Xem thêm OpenCV template Matching