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
- 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
- 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ả