Thay đổi kích thước và lưu hình ảnh python opencv

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách thay đổi kích thước hình ảnh bằng cv2 của OpenCV. resize[] chức năng. Tôi cũng sẽ chỉ cho bạn cách thay đổi kích thước hình ảnh bằng cách giữ nguyên tỷ lệ khung hình để hình ảnh đã thay đổi kích thước không bị biến dạng

Hình ảnh sau đây sẽ được sử dụng làm ví dụ xuyên suốt hướng dẫn này

Hình ảnh có hình dạng [400, 600, 3]

Cv2. resize[src, dsize, dst, fx, fy, interpolation] có 2 đối số bắt buộc và 4 đối số tùy chọn

  • src. [bắt buộc] Đây là hình ảnh đầu vào
  • kích thước. [bắt buộc] Kích thước cho hình ảnh đầu ra
  • dst. [tùy chọn] Hình ảnh đầu ra với kích thước dsize
  • fx. [tùy chọn] Hệ số tỷ lệ dọc theo trục hoành
  • fy. [tùy chọn] Hệ số tỷ lệ dọc theo trục tung
  • nội suy. [không bắt buộc] Thuật toán được sử dụng để tạo lại các pixel mới. Xem Interpolation Flags để biết danh sách các tùy chọn có sẵn

Bài viết này là phần 3 của loạt bài hướng dẫn về thị giác máy tính và xử lý hình ảnh với OpenCV

được tài trợ

Chúng tôi có thể thu nhỏ hoặc nâng cấp hình ảnh khi thay đổi kích thước hình ảnh. Hãy thu nhỏ hình ảnh gốc xuống 300x300 pixel

import cv2

# read the image
image = cv2.imread["image.jpg"]
print["Original shape: ", image.shape]

height = 300
width = 300
dimensions = [width, height]
new_image = cv2.resize[image, dimensions, interpolation=cv2.INTER_LINEAR]

print["New shape:      ", new_image.shape]

# display the images
cv2.imshow["Original image", image]
cv2.imshow["Resized image", new_image]
cv2.waitKey[0]
cv2.destroyAllWindows[]

đầu ra

Original shape:  [400, 600, 3]
New shape:       [300, 300, 3]

Như bạn có thể thấy, hình ảnh mới hơi méo vì chúng tôi không tính đến tỷ lệ khung hình.  

được tài trợ

Chúng tôi có thể thay đổi kích thước hình ảnh bằng cách sử dụng hệ số tỷ lệ. Về cơ bản, hệ số tỷ lệ là một số dùng để nhân kích thước của hình ảnh. Ví dụ: nếu bạn muốn hình ảnh mới của mình bằng một nửa hình ảnh gốc, thì hệ số tỷ lệ phải là 0. 5

Bằng cách này, bạn chắc chắn rằng tỷ lệ khung hình của hình ảnh gốc sẽ giống với hình ảnh mới

import cv2

# read the image
image = cv2.imread["image.jpg"]
print["Original shape: ", image.shape]

height = image.shape[0]
width = image.shape[1]

# We want the new image to be 60% of the original image
scale_factor = 0.6
new_height = int[height * scale_factor]
new_width = int[width * scale_factor]
dimensions = [new_width, new_height]
new_image = cv2.resize[image, dimensions, interpolation=cv2.INTER_LINEAR]

print["New shape:      ", new_image.shape]

cv2.imshow["Original image", image]
cv2.imshow["Resized image", new_image]
cv2.waitKey[0]
cv2.destroyAllWindows[]
Original shape:  [400, 600, 3]
New shape:       [240, 360, 3]

Ở đây, chúng tôi muốn hình ảnh mới của mình bằng 60% so với hình ảnh ban đầu, vì vậy chúng tôi đã nhân chiều rộng và chiều cao với 0. 6

Thông thường, bạn không muốn đặt hệ số tỷ lệ, thay vào đó, bạn muốn thay đổi kích thước hình ảnh theo chiều rộng hoặc chiều cao cụ thể và bạn muốn tỷ lệ khung hình được duy trì tự động

Vì vậy, để làm được điều đó, chúng tôi cần tính toán tỷ lệ khung hình của hình ảnh gốc và sử dụng tỷ lệ này để thay đổi kích thước hình ảnh

Đây là cách làm

import cv2

# read the image
image = cv2.imread["image.jpg"]
print["Original shape: ", image.shape]

height = image.shape[0]
width = image.shape[1]

# let's say we want the new width to be 400px
# and compute the new height based on the aspect ratio
new_width = 400 
ratio = new_width / width # [or new_height / height]
new_height = int[height * ratio]

dimensions = [new_width, new_height]
new_image = cv2.resize[image, dimensions, interpolation=cv2.INTER_LINEAR]

print["New shape:      ", new_image.shape]

cv2.imshow["Original image", image]
cv2.imshow["Resized image", new_image]
cv2.waitKey[0]
cv2.destroyAllWindows[]
Original shape:  [400, 600, 3]
New shape:       [266, 400, 3]

Giả sử chúng ta muốn hình ảnh mới của mình có chiều rộng là 400px. Chúng tôi sử dụng chiều rộng mới này để tính tỷ lệ và chúng tôi tính chiều cao mới bằng cách nhân chiều cao ban đầu với tỷ lệ

Tỉ lệ bằng. ratio = new_width/width = new_height/height. Nếu chúng tôi muốn thay đổi kích thước bằng cách sử dụng chiều rộng mới, chúng tôi sẽ tính tỷ lệ bằng cách sử dụng new_width/width và nếu chúng tôi muốn thay đổi kích thước bằng cách sử dụng chiều cao mới, chúng tôi sẽ tính tỷ lệ bằng cách sử dụng new_height/height

Hình ảnh mới sẽ không bị biến dạng. Đây là kết quả

bài viết liên quan. Cách cắt ảnh bằng OpenCV và Python

Trong hướng dẫn này, bạn đã học cách thay đổi kích thước hình ảnh bằng cách sử dụng chiều rộng và chiều cao tùy chỉnh nhưng hình ảnh thu được trông bị méo. Bạn cũng đã học cách sử dụng hệ số tỷ lệ để duy trì tỷ lệ khung hình trong khi thay đổi kích thước;

Cuối cùng, tôi đã chỉ cho bạn cách thay đổi kích thước hình ảnh bằng cách giữ nguyên tỷ lệ khung hình mà không sử dụng hệ số tỷ lệ. Điều này hữu ích khi bạn muốn thay đổi kích thước hình ảnh của mình bằng cách cung cấp chiều rộng hoặc chiều cao cụ thể

Nếu bạn muốn tìm hiểu thêm về thị giác máy tính và xử lý hình ảnh, hãy xem khóa học của tôi Thị giác máy tính và xử lý hình ảnh với OpenCV và Python

Xin vui lòng để lại một bình luận trong phần dưới đây. Ngoài ra, đừng quên đăng ký danh sách gửi thư để không bỏ lỡ bất kỳ bài viết tiếp theo nào

Chủ Đề