Xoay hình ảnh và lưu python

Trong hướng dẫn này, bạn sẽ học cách xoay hình ảnh bằng OpenCV. Ngoài ra, tôi cũng sẽ chỉ cho bạn cách xoay ảnh bằng hai chức năng tiện lợi của tôi từ thư viện imutils,

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
3 và
$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
4, giúp xoay ảnh bằng OpenCV dễ dàng hơn [và yêu cầu ít mã hơn]

Trước đây, chúng ta đã học cách dịch [i. e. , shift] một hình ảnh, lên, xuống, trái và phải [hoặc bất kỳ sự kết hợp nào]. Chúng tôi hiện đang chuyển sang chủ đề xử lý hình ảnh tiếp theo của chúng tôi - xoay

Xoay chính xác như âm thanh của nó. xoay hình ảnh theo một số góc,

. Chúng tôi sẽ sử dụng
để biểu thị số độ [không phải radian] mà chúng tôi đang xoay một hình ảnh.

Tôi cũng sẽ chỉ cho bạn một số kỹ thuật giúp xoay hình ảnh bằng OpenCV dễ dàng hơn

Để tìm hiểu cách xoay hình ảnh bằng OpenCV, chỉ cần tiếp tục đọc

Tìm kiếm mã nguồn cho bài viết này?

OpenCV Xoay hình ảnh

Trong phần đầu tiên của hướng dẫn này, chúng ta sẽ thảo luận về cách OpenCV xoay hình ảnh và các chức năng có sẵn để xoay

Từ đó, chúng tôi sẽ định cấu hình môi trường phát triển của mình và xem xét cấu trúc thư mục dự án của chúng tôi

Sau đó, tôi sẽ chỉ cho bạn ba cách để xoay hình ảnh bằng OpenCV

  1. Sử dụng hàm
    $ tree . --dirsfirst
    .
    ├── opencv_logo.png
    └── opencv_rotate.py
    
    0 directories, 2 files
    0. Được xây dựng trong OpenCV, nhưng yêu cầu xây dựng một ma trận xoay và áp dụng rõ ràng một đường cong affine, làm cho mã dài dòng hơn
  2. Sử dụng hàm
    $ tree . --dirsfirst
    .
    ├── opencv_logo.png
    └── opencv_rotate.py
    
    0 directories, 2 files
    3. Một phần của thư viện imutils của tôi. Cho phép xoay hình ảnh bằng OpenCV trong một lần gọi hàm
  3. Sử dụng hàm
    $ tree . --dirsfirst
    .
    ├── opencv_logo.png
    └── opencv_rotate.py
    
    0 directories, 2 files
    4. Cũng là một phần của thư viện imutils của tôi. Đảm bảo rằng không có phần nào của hình ảnh bị cắt trong quá trình xoay

Chúng tôi sẽ kết thúc hướng dẫn này bằng cách xem xét kết quả xoay vòng OpenCV của chúng tôi

OpenCV xoay hình ảnh như thế nào?

Tương tự như phép tịnh tiến, và có lẽ không có gì đáng ngạc nhiên, phép quay theo một góc

có thể được xác định bằng cách xây dựng ma trận M ở dạng.

Cho một mặt phẳng [x, y]-Cartesian, ma trận này có thể được sử dụng để xoay một vectơ

độ [ngược chiều kim đồng hồ] quanh gốc tọa độ. Trong trường hợp này, gốc tọa độ thường là tâm của ảnh; .

Từ ảnh gốc, I, ảnh được xoay, R, sau đó thu được bằng phép nhân ma trận đơn giản.

Tuy nhiên, OpenCV cũng cung cấp khả năng [1] chia tỷ lệ [i. e. , thay đổi kích thước] một hình ảnh và [2] cung cấp một tâm xoay tùy ý xung quanh để thực hiện xoay

Do đó, ma trận xoay đã sửa đổi của chúng tôi, M, là

trong đó

tương ứng [x .

Nếu toán học bắt đầu trở nên hơi choáng ngợp, đừng lo lắng - chúng ta sẽ chuyển sang một số mã giúp các khái niệm này rõ ràng hơn nhiều

Định cấu hình môi trường phát triển của bạn

Để làm theo hướng dẫn này, bạn cần cài đặt thư viện OpenCV trên hệ thống của mình

May mắn thay, OpenCV có thể cài đặt bằng pip

$ pip install opencv-contrib-python

Nếu bạn cần trợ giúp để định cấu hình môi trường phát triển của mình cho OpenCV, tôi thực sự khuyên bạn nên đọc hướng dẫn cài đặt OpenCV theo pip của tôi — nó sẽ giúp bạn thiết lập và chạy trong vài phút

Bạn gặp sự cố khi định cấu hình môi trường phát triển của mình?

Hình 1. Gặp sự cố khi định cấu hình môi trường phát triển của bạn?

Tất cả những gì đã nói, là bạn

  • Thời gian ngắn?
  • Tìm hiểu trên hệ thống bị khóa quản trị của chủ nhân của bạn?
  • Bạn muốn bỏ qua những rắc rối khi chiến đấu với dòng lệnh, trình quản lý gói và môi trường ảo?
  • Bạn đã sẵn sàng chạy mã ngay bây giờ trên các hệ thống Windows, macOS hoặc Linux của mình chưa?

Vậy thì hãy tham gia PyImageSearch Plus ngay hôm nay

Có quyền truy cập vào Jupyter Notebooks cho hướng dẫn này và các hướng dẫn khác của PyImageSearch được định cấu hình sẵn để chạy trên hệ sinh thái của Google Colab ngay trong trình duyệt web của bạn. Không cần cài đặt

Và trên hết, những Notebook Jupyter này sẽ chạy trên Windows, macOS và Linux

Cấu trúc dự án

Trước khi chúng tôi có thể triển khai xoay vòng với OpenCV, trước tiên hãy xem lại cấu trúc thư mục dự án của chúng tôi

Đảm bảo rằng bạn truy cập phần “Tải xuống” của hướng dẫn này để truy xuất mã nguồn và hình ảnh ví dụ, rồi từ đó, hãy xem qua bên trong

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files

Ở đây, chúng ta có

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
3. Tập lệnh này sẽ tải
$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
4 [hoặc bất kỳ hình ảnh nào khác mà bạn chọn] và sau đó áp dụng một loạt phép xoay cho nó, qua đó trình bày cách thực hiện phép xoay với OpenCV

Thực hiện xoay hình ảnh với OpenCV

Bây giờ chúng tôi đã sẵn sàng để triển khai xoay hình ảnh với OpenCV

Mở tệp

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
3 trong cấu trúc thư mục dự án của bạn và chèn đoạn mã sau

# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]

Dòng 2-4 nhập các gói Python cần thiết của chúng tôi. Chúng tôi sẽ sử dụng

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
6 cho các đối số dòng lệnh, imutils cho tập hợp các hàm tiện ích OpenCV của tôi [cụ thể là các phương thức
$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
3 và
$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
4] và
$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
9 cho các ràng buộc OpenCV của chúng tôi

Chúng tôi chỉ có một đối số dòng lệnh duy nhất,

# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
0, là đường dẫn đến hình ảnh đầu vào mà chúng tôi muốn xoay [mà chúng tôi mặc định là
$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
4]

Tiếp theo, hãy tải hình ảnh đầu vào của chúng tôi từ đĩa và thực hiện một số thay đổi kích thước cơ bản

$ pip install opencv-contrib-python
1

Chúng tôi bắt đầu bằng cách tải hình ảnh đầu vào của chúng tôi và hiển thị nó trên màn hình của chúng tôi

Hình 2. Đang tải hình ảnh đầu vào của chúng tôi

Khi chúng tôi xoay một hình ảnh, chúng tôi cần chỉ định xung quanh điểm mà chúng tôi muốn xoay. Trong hầu hết các trường hợp, bạn sẽ muốn xoay quanh tâm của hình ảnh;

Hãy tiếp tục và xoay quanh tâm của hình ảnh. Dòng 18 và 19 lấy chiều rộng và chiều cao của hình ảnh rồi chia từng thành phần cho

# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
2 để xác định tâm của hình ảnh

Giống như chúng ta xác định một ma trận để dịch một hình ảnh, chúng ta cũng xác định một ma trận để xoay hình ảnh. Thay vì xây dựng ma trận theo cách thủ công bằng cách sử dụng NumPy [có thể hơi tẻ nhạt], chúng ta sẽ chỉ gọi phương thức

# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
3 trên Dòng 22

Hàm

# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
3 nhận ba đối số. Đối số đầu tiên là điểm mà chúng ta xoay hình ảnh [trong trường hợp này là tâm
# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
5 và
# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
6 của hình ảnh]

Sau đó, chúng tôi chỉ định

, số độ [ngược chiều kim đồng hồ] mà chúng tôi sẽ xoay hình ảnh. Trong trường hợp này, chúng ta sẽ xoay hình ảnh 45 độ.

Đối số cuối cùng là tỷ lệ của hình ảnh. Chúng tôi chưa thảo luận về việc thay đổi kích thước hình ảnh, nhưng ở đây bạn có thể chỉ định một giá trị dấu phẩy động, trong đó 1. 0 có nghĩa là giống nhau, kích thước ban đầu của hình ảnh được sử dụng. Tuy nhiên, nếu bạn chỉ định giá trị là 2. 0, hình ảnh tăng gấp đôi kích thước — tương tự, giá trị 0. 5 nửa kích thước hình ảnh

Khi chúng ta có ma trận xoay

# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
7 từ hàm
# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
3, chúng ta có thể áp dụng phép xoay cho hình ảnh của mình bằng phương pháp
# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
9 trên Dòng 23

Đối số đầu tiên của hàm này là

$ pip install opencv-contrib-python
10 mà chúng ta muốn xoay. Sau đó, chúng tôi chỉ định ma trận xoay
# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
7 và kích thước đầu ra [chiều rộng và chiều cao] của hình ảnh của chúng tôi. Dòng 24 sau đó hiển thị hình ảnh của chúng tôi được xoay 45 độ

Hình 3. Xoay hình ảnh với OpenCV. Độ dương xoay hình ảnh ngược chiều kim đồng hồ

Các dòng 27-29 làm tương tự, nhưng lần này xoay một hình ảnh _______112 độ [theo chiều kim đồng hồ] quanh tọa độ _______65 và _______66 ở tâm

Ghi chú. Hãy nhớ rằng trong OpenCV, độ dương xác định xoay ngược chiều kim đồng hồ trong khi độ âm biểu thị xoay theo chiều kim đồng hồ. Giữ nó trong tâm trí;

Hình 4 hiển thị đầu ra của các thao tác thay đổi kích thước này

hinh 4. Sử dụng OpenCV để xoay hình ảnh theo chiều kim đồng hồ bằng cách cung cấp giá trị độ âm

Như bạn có thể thấy, hình ảnh của chúng tôi đã được xoay. Hãy dành một chút thời gian để lưu ý rằng OpenCV không tự động phân bổ không gian cho toàn bộ hình ảnh được xoay của chúng tôi để vừa với khung

Đây là hành vi dự định. Nếu bạn muốn toàn bộ hình ảnh vừa với chế độ xem sau khi xoay, bạn cần sửa đổi chiều rộng và chiều cao, được ký hiệu là

$ pip install opencv-contrib-python
15 trong hàm
# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
9. Như chúng ta sẽ thấy ở phần sau trong tập lệnh này, hàm
$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
4 sẽ đảm nhận tất cả những việc đó cho chúng ta

Cho đến thời điểm này, chúng tôi chỉ xoay một hình ảnh về trung tâm của hình ảnh. Nhưng nếu chúng ta muốn xoay hình ảnh về một số điểm tùy ý thì sao?

Hãy tiếp tục và xem làm thế nào điều này có thể được thực hiện

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
7

Đến bây giờ, mã này trông khá chuẩn để thực hiện phép quay. Tuy nhiên, hãy lưu ý đối số đầu tiên của hàm

# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
3. Ở đây, chúng tôi chỉ ra rằng chúng tôi muốn xoay hình ảnh xung quanh x = 10, y = 10 hoặc xấp xỉ góc trên cùng bên trái của hình ảnh

Khi chúng tôi áp dụng cách xoay này, hình ảnh đầu ra của chúng tôi trông như thế này

Hình 5. Sử dụng OpenCV để xoay hình ảnh của chúng tôi 45 độ ngược chiều kim đồng hồ xung quanh x = 10, y = 10

Ta có thể thấy tâm xoay không còn là tâm của ảnh

Tuy nhiên, cũng giống như việc dịch một hình ảnh, thực hiện lệnh gọi tới cả

# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
3 và
# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
9 có thể trở nên khá tẻ nhạt — chưa kể nó còn làm cho mã của chúng ta trở nên dài dòng hơn đáng kể

Hãy giảm số lượng mã chúng ta cần viết bằng cách gọi

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
3, một chức năng tiện lợi kết thúc các cuộc gọi đến
# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
3 và
# import the necessary packages
import argparse
import imutils
import cv2

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser[]
ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
	help="path to the input image"]
args = vars[ap.parse_args[]]
9

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
3

Ở đây, chúng tôi xoay hình ảnh của mình 180 độ, nhưng chúng tôi có thể làm cho mã của mình ít dài dòng hơn đáng kể bằng cách sử dụng phương thức

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
74

Hình 6 hiển thị đầu ra của vòng quay của chúng tôi

Hình 6. Xoay hình ảnh của chúng tôi 180 độ bằng OpenCV và imutils

Như bạn đã thấy trong các ví dụ trước, OpenCV không phân bổ đủ dung lượng để lưu trữ toàn bộ hình ảnh nếu một phần của hình ảnh bị cắt trong quá trình xoay

Cách giải quyết vấn đề đó là sử dụng hàm

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
4

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
5

Chức năng này sẽ tự động mở rộng mảng hình ảnh sao cho toàn bộ hình ảnh được xoay nằm gọn trong nó

Kết quả của việc áp dụng hàm

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
76 có thể được nhìn thấy trong Hình 7, trong đó chúng ta xoay hình ảnh 33 độ ngược chiều kim đồng hồ

Hình 7. Xoay hình ảnh của chúng tôi 33 độ ngược chiều kim đồng hồ trong khi đảm bảo toàn bộ hình ảnh được xoay vẫn hiển thị trong khu vực có thể xem được

Và đó là tất cả để có nó

Ghi chú. Hàm

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
4 đảo ngược mối quan hệ giữa các giá trị dương/âm và xoay theo chiều kim đồng hồ/ngược chiều kim đồng hồ. Ở đây, các giá trị âm sẽ xoay ngược chiều kim đồng hồ trong khi các giá trị dương sẽ xoay theo chiều kim đồng hồ

Khi áp dụng xoay ảnh với OpenCV, bạn có ba tùy chọn

  1. # import the necessary packages
    import argparse
    import imutils
    import cv2
    
    # construct the argument parser and parse the arguments
    ap = argparse.ArgumentParser[]
    ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
    	help="path to the input image"]
    args = vars[ap.parse_args[]]
    3 và
    # import the necessary packages
    import argparse
    import imutils
    import cv2
    
    # construct the argument parser and parse the arguments
    ap = argparse.ArgumentParser[]
    ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
    	help="path to the input image"]
    args = vars[ap.parse_args[]]
    9
  2. $ tree . --dirsfirst
    .
    ├── opencv_logo.png
    └── opencv_rotate.py
    
    0 directories, 2 files
    3
  3. $ tree . --dirsfirst
    .
    ├── opencv_logo.png
    └── opencv_rotate.py
    
    0 directories, 2 files
    4

Trộn và kết hợp chúng khi bạn thấy phù hợp với các ứng dụng của riêng bạn

Kết quả xoay hình ảnh OpenCV

Để xoay hình ảnh bằng OpenCV, hãy nhớ truy cập phần “Tải xuống” của hướng dẫn này để lấy mã nguồn và hình ảnh ví dụ

Chúng tôi đã xem xét kết quả của tập lệnh này trong phần trước, nhưng khi bạn đã sẵn sàng chạy tập lệnh cho chính mình, bạn có thể sử dụng lệnh sau

$ tree . --dirsfirst
.
├── opencv_logo.png
└── opencv_rotate.py

0 directories, 2 files
9

Kết quả xoay vòng OpenCV của bạn phải khớp với kết quả của tôi từ phần trước

Cái gì tiếp theo?

Thông tin khóa học.
Tổng cộng hơn 60 lớp • Hơn 64 giờ video hướng dẫn mã theo yêu cầu • Cập nhật lần cuối. Tháng 12 năm 2022
★★★★★ 4. 84 [128 Xếp hạng] • Hơn 15.800 Học sinh Ghi danh

Tôi thực sự tin rằng nếu bạn có đúng giáo viên, bạn có thể thành thạo thị giác máy tính và học sâu

Bạn có nghĩ rằng việc học thị giác máy tính và học sâu tốn nhiều thời gian, quá sức và phức tạp không?

Đó không phải là trường hợp

Tất cả những gì bạn cần để thành thạo thị giác máy tính và học sâu là nhờ ai đó giải thích mọi thứ cho bạn bằng các thuật ngữ đơn giản, trực quan. Và đó chính xác là những gì tôi làm. Nhiệm vụ của tôi là thay đổi giáo dục và cách dạy các chủ đề Trí tuệ nhân tạo phức tạp

Nếu bạn nghiêm túc về việc học thị giác máy tính, điểm dừng chân tiếp theo của bạn phải là Đại học PyImageSearch, khóa học trực tuyến về thị giác máy tính, học sâu và OpenCV toàn diện nhất hiện nay. Tại đây, bạn sẽ học cách áp dụng thành công và tự tin tầm nhìn máy tính vào công việc, nghiên cứu và dự án của mình. Tham gia cùng tôi trong việc làm chủ thị giác máy tính

Bên trong Đại học PyImageSearch, bạn sẽ tìm thấy

  • ✓ Hơn 60 khóa học về chủ đề thị giác máy tính thiết yếu, học sâu và OpenCV
  • ✓ Hơn 60 Chứng chỉ Hoàn thành
  • ✓ Hơn 64 giờ video theo yêu cầu
  • ✓ Các khóa học hoàn toàn mới được phát hành thường xuyên, đảm bảo bạn có thể theo kịp các kỹ thuật tiên tiến nhất
  • ✓ Máy tính xách tay Jupyter được định cấu hình sẵn trong Google Colab
  • ✓ Chạy tất cả các mẫu mã trong trình duyệt web của bạn — hoạt động trên Windows, macOS và Linux [không yêu cầu cấu hình môi trường nhà phát triển. ]
  • ✓ Truy cập kho lưu trữ mã tập trung cho tất cả hơn 500 hướng dẫn trên PyImageSearch
  • ✓ Dễ dàng tải xuống bằng một cú nhấp chuột đối với mã, bộ dữ liệu, mô hình được đào tạo trước, v.v.
  • ✓ Truy cập trên thiết bị di động, máy tính xách tay, máy tính để bàn, v.v.

Nhấn vào đây để tham gia Đại học PyImageSearch

Tóm lược

Trong hướng dẫn này, bạn đã học cách xoay hình ảnh bằng OpenCV. Để xoay hình ảnh theo một góc tùy ý với OpenCV, chúng ta cần

  1. Xây dựng ma trận xoay 2D bằng hàm
    # import the necessary packages
    import argparse
    import imutils
    import cv2
    
    # construct the argument parser and parse the arguments
    ap = argparse.ArgumentParser[]
    ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
    	help="path to the input image"]
    args = vars[ap.parse_args[]]
    3
  2. Thực hiện một sợi dọc affine bằng cách sử dụng chức năng
    # import the necessary packages
    import argparse
    import imutils
    import cv2
    
    # construct the argument parser and parse the arguments
    ap = argparse.ArgumentParser[]
    ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
    	help="path to the input image"]
    args = vars[ap.parse_args[]]
    9, cung cấp hình ảnh đầu vào của chúng tôi và ma trận xoay được tính toán,
    # import the necessary packages
    import argparse
    import imutils
    import cv2
    
    # construct the argument parser and parse the arguments
    ap = argparse.ArgumentParser[]
    ap.add_argument["-i", "--image", type=str, default="opencv_logo.png",
    	help="path to the input image"]
    args = vars[ap.parse_args[]]
    7

Kết quả là hình ảnh đã được xoay

độ.

Vấn đề với việc sử dụng các hàm của OpenCV để xoay hình ảnh là chúng yêu cầu hai dòng mã — một dòng để xây dựng ma trận xoay và sau đó là dòng khác để thực hiện chuyển đổi

Để giúp xoay hình ảnh với OpenCV dễ dàng hơn, tôi đã triển khai hai phương thức trong thư viện imutils của mình

  1. $ tree . --dirsfirst
    .
    ├── opencv_logo.png
    └── opencv_rotate.py
    
    0 directories, 2 files
    3. Thực hiện xoay hình ảnh OpenCV trong một dòng mã
  2. $ tree . --dirsfirst
    .
    ├── opencv_logo.png
    └── opencv_rotate.py
    
    0 directories, 2 files
    4. Cũng thực hiện xoay ảnh với OpenCV nhưng đảm bảo ảnh [sau khi xoay] vẫn xem được và không có phần nào của ảnh bị cắt

Tôi khuyên bạn nên làm quen với cả ba kỹ thuật xoay vì bạn có thể sẽ sử dụng từng kỹ thuật khi phát triển quy trình xử lý hình ảnh tương ứng của riêng mình

Để tải mã nguồn về bài đăng này [và được thông báo khi các hướng dẫn trong tương lai được xuất bản tại đây trên PyImageSearch], chỉ cần nhập địa chỉ email của bạn vào biểu mẫu bên dưới

Tải xuống Mã nguồn và Hướng dẫn tài nguyên 17 trang MIỄN PHÍ

Nhập địa chỉ email của bạn dưới đây để có được một. zip của mã và Hướng dẫn tài nguyên 17 trang MIỄN PHÍ về Thị giác máy tính, OpenCV và Học sâu. Bên trong, bạn sẽ tìm thấy các hướng dẫn, sách, khóa học và thư viện được chọn lọc thủ công của tôi để giúp bạn thành thạo CV và DL

Chủ Đề