Làm cách nào để xoay hình ảnh 90 độ trong opencv python?

Hình ảnh có thể được xoay ở nhiều góc độ khác nhau [90,180,270 và 360]. OpenCV tính toán ma trận affine thực hiện phép biến đổi affine, nghĩa là nó không bảo toàn góc giữa các đường hoặc khoảng cách giữa các điểm, mặc dù nó bảo toàn tỷ lệ khoảng cách giữa các điểm nằm trên các đường

Cú pháp của hình ảnh xoay như sau

Thông số

  • trung tâm. Nó đại diện cho trung tâm của hình ảnh
  • góc. Nó biểu thị góc mà một hình ảnh cụ thể được xoay theo hướng ngược chiều kim đồng hồ
  • quay. ndarray chứa dữ liệu hình ảnh được xoay
  • tỉ lệ. giá trị 1. 0 được biểu thị rằng hình dạng được giữ nguyên. Chia tỷ lệ hình ảnh theo giá trị được cung cấp

Ví dụ 1

đầu ra

Như mọi người có thể đã biết, OpenCV là Gói Python cho phép các nhà phát triển phần mềm có được kinh nghiệm trực tiếp trong lĩnh vực Thị giác máy tính. Computer Vision cho phép máy tính đạt được mức độ hiểu biết và hiểu biết cao từ dữ liệu hình ảnh và video kỹ thuật số. Nếu bạn chưa đọc các bài viết trước của tôi về Thị giác máy tính bằng Python, vui lòng điều hướng đến các siêu liên kết sau

Bài viết này sẽ giới thiệu cho chúng ta một số thao tác khác có thể được áp dụng cho dữ liệu hình ảnh bằng thư viện OpenCV trong Ngôn ngữ lập trình Python

Nguồn. TheAILearner

Yêu cầu

Để chúng tôi có được nhiều bài học nhất từ ​​ví dụ về OpenCV này, bạn nên theo dõi trong môi trường viết mã IDE mà bạn chọn. Để tạo điều kiện thuận lợi cho trải nghiệm học tập cụ thể này, chúng tôi sẽ sử dụng một hình ảnh có thể tải xuống từ liên kết này. Ngoài ra, bạn có thể lưu hình ảnh được tìm thấy bên dưới

Nguồn. giấy trượt tuyết. com

Đang tải một hình ảnh vào bộ nhớ

Như thường lệ, nhiệm vụ đầu tiên hoàn thành thành công sẽ là tải hình ảnh vào bộ nhớ hệ thống của chúng tôi

image = cv2.imread["C:/Users/Shivek/Pictures/nature-wallpapers-hd-17.jpg", cv2.IMREAD_COLOR]
cv2.imshow['Analytics Vidhya Computer Vision- Mountain View', image]
cv2.waitKey[]
cv2.destroyAllWindows[]

Xin lưu ý. Tôi đã bỏ qua phần giải thích về đoạn mã trên, vì nó đã được đề cập trong các bài viết trước. Hãy nhớ rằng, để thay đổi đối số đầu tiên của phương thức imread[] thành đường dẫn tệp chính xác của bạn

Đầu ra cho khối mã trên sẽ được nhìn thấy như sau

Như mọi người có thể thấy, đầu ra hình ảnh hơi quá lớn. Lớn đến nỗi nó không thể vừa với màn hình máy tính của tôi. Và để xác nhận điều này, chúng ta hãy xem hình dạng của hình ảnh của chúng tôi

print["Dimensions:", image.shape]
print["Rows: %d"%[image.shape[0]]]
print["Columns: %d"%[image.shape[1]]]
print["Color Channels: %d"%[image.shape[2]]]

Đầu ra của đoạn mã trên sẽ được nhìn thấy như sau

Do đó, chúng tôi có thể xác nhận rằng hình ảnh có chiều rộng là 1200 pixel và chiều cao là 1920 pixel. Để cho phép hình ảnh dễ dàng hơn, thuận tiện hơn, chúng tôi sẽ
tiến hành thay đổi kích thước hình ảnh của mình- chúng tôi sẽ giảm kích thước.

# resize the image to be pixel dimensions 600 by 450
resized_image = cv2.resize[src=image, dsize=[600, 450]]
cv2.imshow['Analytics Vidhya Computer Vision- Resized Mountain View', resized_image]
cv2.waitKey[]
cv2.destroyAllWindows[]

Xuất ra đoạn mã trên, hiển thị như sau

Chúng tôi đã giảm hình ảnh để có kích thước 600 × 450. Như mọi người sẽ thấy, hình ảnh hoàn chỉnh có thể hiển thị trên màn hình, đồng thời hiển thị sắc nét hơn

Lưu hình ảnh đã thay đổi kích thước

Sau đó, chúng tôi tiến hành lưu hình ảnh đã thay đổi kích thước như sau

cv2.imwrite['Mountain View 600x450.png', resized_image]

Đầu ra sẽ được nhìn thấy trong trình khám phá tệp tương ứng của bạn- Tôi sử dụng Spyder IDE và đầu ra của tôi như sau

Xoay một hình ảnh

Khi chúng ta thực hiện hành động xoay một đối tượng, về cơ bản, những gì chúng ta đang làm là áp dụng chuyển động tròn cho đối tượng và trong trường hợp này là một hình ảnh. Mục tiêu là di chuyển đối tượng theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ xung quanh một điểm xoay cố định

Đối với OpenCV và Python, chúng ta có thể đạt được hành động này bằng cách sử dụng phương thức rotate[]. Phương thức rotate[] yêu cầu phải chỉ định hai tham số quan trọng

  1. src. Đây là mảng pixel nguồn, phản ánh và giống với chính hình ảnh. Đó là hình ảnh được xoay
  2. xoay Mã. Đây là tập hợp các đối số được xác định trước mà từ đó bạn được yêu cầu chọn một đối số. Mã xoay mà bạn chọn sẽ chỉ định và ảnh hưởng đến bản chất của phiên bản xoay của bạn

Có ba đối số để chọn, cho tham số rotateCode

  • Xoay hình ảnh 90o. rotateCode = ROTATE_90_CLOCKWISE
  • Xoay hình ảnh 180o. mã xoay = ROTATE_180
  • Xoay hình ảnh 270o. rotateCode = ROTATE_90_COUNTERCLOCKWISE

Để bắt đầu quá trình xoay hình ảnh, trước tiên chúng tôi sẽ tải hình ảnh đã thay đổi kích thước vào bộ nhớ hệ thống của chúng tôi như sau

image = cv2.imread['C:/Users/Shivek/Desktop/Experimenting/Analytics Vidhya Blogathon/Mountain View 600x450.png', flags=cv2.IMREAD_COLOR]
cv2.imshow['Analytics Vidhya Computer Vision- Mountain View ORIGINAL [600x450]', image]
cv2.waitKey[]
cv2.destroyAllWindows[]

Đầu ra cho khối mã trên sẽ được nhìn thấy như sau

Tiếp theo, chúng tôi sẽ cố gắng thực hiện xoay hình ảnh. Cụ thể chúng ta sẽ xoay ảnh 90 độ theo chiều kim đồng hồ

image_rotated_90_DEG_clockwise = cv2.rotate[src=image, rotateCode=cv2.ROTATE_90_CLOCKWISE]
cv2.imshow['Mountain View Rotated 90 Degrees Clockwise', image_rotated_90_DEG_clockwise]
cv2.waitKey[]
cv2.destroyAllWindows[]
cv2.imwrite['Mountain View Rotated 90 Degrees Clockwise.png', image_rotated_90_DEG_clockwise]

Như mọi người có thể thấy trong khối mã trên, các dòng mã tương đối giống với những gì chúng tôi đã trình bày cho đến thời điểm này. Tôi muốn thảo luận về một dòng mã cụ thể- tôi. e. , dòng đầu tiên

image_rotated_90_DEG_clockwise = cv2.rotate[src=image, rotateCode=cv2.ROTATE_90_CLOCKWISE]

Như có thể thấy trong dòng mã trên, chúng tôi đã tạo một biến mới mà chúng tôi đang cố gắng sử dụng để lưu trữ nội dung của hình ảnh được xoay. Chúng tôi đã sử dụng phương thức rotate[] được cung cấp bởi gói OpenCV trong Python và đã chuyển vào hình ảnh nguồn [src], tôi. e. , hình ảnh sẽ được xoay và mã xoay thích hợp. Vì chúng tôi muốn xoay hình ảnh 90 độ theo chiều kim đồng hồ, chúng tôi chỉ định rotateCode = cv2. XOAY_90_CHIỀU ĐỒNG HỒ

Đầu ra cho khối mã trên sẽ được nhìn thấy như sau

Chúng ta sẽ tiến hành xoay ảnh 1 góc 90 độ ngược chiều kim đồng hồ

image_rotated_90_DEG_anticlockwise = cv2.rotate[src=image, rotateCode=cv2.ROTATE_90_COUNTERCLOCKWISE]
cv2.imshow['Mountain View Rotated 90 Degrees AntiClockwise', image_rotated_90_DEG_anticlockwise]
cv2.waitKey[]
cv2.destroyAllWindows[]
cv2.imwrite['Mountain View Rotated 90 Degrees AntiClockwise.png', image_rotated_90_DEG_anticlockwise]

Đầu ra của khối mã trên sẽ được xem như bên dưới

Cuối cùng, chúng tôi sẽ cố gắng xoay hình ảnh 180 độ

________số 8

Đầu ra cho khối mã trên sẽ được nhìn thấy như sau

Và chúng tôi đã triển khai thành công Thao tác OpenCV nâng cao trên dữ liệu hình ảnh bằng Ngôn ngữ lập trình Python

Điều này kết thúc bài viết của tôi về OpenCV. Tôi hy vọng rằng bạn đã học được các tính năng và chủ đề mới của OpenCV

Xin vui lòng kết nối với tôi trên LinkedIn

Cảm ơn bạn đã dành thời gian

Phương tiện hiển thị trong bài viết này không thuộc sở hữu của Analytics Vidhya và được sử dụng theo quyết định của Tác giả

Chủ Đề