Trong video này, chúng ta sẽ thấy một chức năng quan trọng và cơ bản của OpenCV và chính xác Cách cắt ảnh bằng OpenCV và Python. Nó có vẻ là một điều tầm thường và bỏ qua đối với những người biết Opencv nhưng việc cắt xén hình ảnh bằng Python có thể giúp ích cho nhiều người mới bắt đầu theo dõi các bài học của tôi Show
Trong bài học này chúng ta sẽ thấy 1. Cách cắt ảnh theo chiều dọc hoặc chiều ngang 1. Cách cắt ảnh theo chiều dọc hoặc chiều ngangĐầu tiên chúng ta cần tải hình ảnh vào dự án của mình. Rõ ràng đối với các hình ảnh cắt bằng Opencv và Python, chúng tôi phải đảm bảo rằng thư viện OpenCV được cài đặt chính xác Nếu bạn chưa cài đặt Opencv, đừng lo lắng, tôi cung cấp cho bạn hướng dẫn cài đặt trên ba thiết bị khác nhau Cách cài đặt Python 3 và Opencv 4 trên WindowsCài đặt Opencv 4. 1 trên Nvidia Jetson Nano Hướng dẫn cài đặt Raspberry Pi 3 và Opencv 3 Chà, bây giờ chúng ta có tất cả các yếu tố cơ bản cần thiết, chúng ta tiến hành nhập Opencv và Numpy, sau đó chúng ta cũng đặt đường dẫn của hình ảnh để đưa nó vào dự án python của chúng ta import cv2 import numpy as np img = cv2.imread("colors.jpg") Bây giờ chúng ta hãy lấy các hàng và cột của hình ảnh rows, cols, _ = img.shape print("Rows", rows) print("Cols", cols) Hàng đại diện cho phần dọc và cols phần ngang. Như đã thấy trong bản in của hình ảnh bên dưới, tôi đã khoanh tròn kết quả, kích thước hiển thị chính xác một hình chữ nhật Bây giờ hãy tiến hành thử nghiệm cắt ngang đầu tiên # Cut image cut_image = img[426: 853, 0: 1280] Trong mã, chúng tôi đã đặt một đường cắt ngang và trong hình ảnh, bạn có thể thấy kết quả thử nghiệm đầu tiên. Cố gắng thay đổi các số của mảng, trong giới hạn tối đa của hình ảnh, để hiểu rõ hơn về quy trình 2. Cắt một phần của hình ảnhSau tất cả các bước trước, để hiểu Cách cắt ảnh bằng OpenCV và Python, bây giờ chúng ta cần truy xuất vùng quan tâm (ROI). Nếu bạn muốn tìm hiểu thêm về chủ đề này, tôi khuyên dùng OpenCV chính thức Để làm điều này, chúng ta cần tìm tọa độ của-điểm trên cùng bên trái (x, y) -phía dưới bên phải (x2, y2) # ROI (Region of interest) cv2.rectangle(img, (385, 155), (851, 613), (0, 255, 0), 3) roi = img[155: 613, 385: 851] Lần đầu tiên tôi kiểm tra tọa độ của các điểm để tôi có thể nhập chúng theo cách thủ công. Như bạn có thể thấy từ hình ảnh đây là kết quả cuối cùng Bạn có thể nhận thấy rằng có một khung nhỏ màu xanh lá cây, không cần thiết phải có nó và bạn có thể xóa nó bằng cách bình luận chức năng này cv2. hình chữ nhật Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách chọn hộp giới hạn hoặc vùng quan tâm hình chữ nhật (ROI) trong ảnh trong OpenCV. Trước đây, chúng tôi phải viết bộ chọn hộp giới hạn của riêng mình bằng cách xử lý các sự kiện chuột. Tuy nhiên, bây giờ chúng tôi có tùy chọn sử dụng chức năng selectROI vốn là một phần của OpenCV Tôi luôn ngạc nhiên trước những lựa chọn kỳ lạ được thực hiện trong thư viện OpenCV. Bạn sẽ nghĩ rằng selectROI sẽ là một phần của highgui có chức năng hiển thị hình ảnh, vẽ lên hình ảnh, v.v. Tuy nhiên, selectROI là một phần của API theo dõi. Như bạn sẽ nhận thấy ở phần sau của bài đăng, các lựa chọn được thực hiện khi viết selectROI là kỳ lạ. Nhưng, trước khi chúng ta chỉ trích, chúng ta phải biết ơn vì ai đó đã tạo ra thứ gì đó hữu ích mặc dù nó không hoàn hảo Hãy đi sâu vào và xem cách sử dụng selectROI Cách chọn khu vực quan tâm trong OpenCVVì selectROI là một phần của API theo dõi, bạn phải có OpenCV 3. 0 (hoặc cao hơn) được cài đặt với opencv_contrib Hãy bắt đầu với một mã mẫu. Nó cho phép bạn chọn một hình chữ nhật trong ảnh, cắt vùng hình chữ nhật và cuối cùng hiển thị ảnh đã cắt Chúng tôi sẽ sửa đổi dòng được đánh dấu để thử các tùy chọn khác nhau C++#include <opencv2/opencv.hpp> // selectROI is part of tracking API #include <opencv2/tracking.hpp> using namespace std; using namespace cv; int main (int argc, char **arv) { // Read image Mat im = imread("image.jpg"); // Select ROI Rect2d r = selectROI(im); // Crop image Mat imCrop = im(r); // Display Cropped Image imshow("Image", imCrop); waitKey(0); return 0; } Mã tương tự có thể được viết bằng Python như con trănimport cv2 import numpy as np if __name__ == '__main__' : # Read image im = cv2.imread("image.jpg") # Select ROI r = cv2.selectROI(im) # Crop image imCrop = im[int(r[1]):int(r[1]+r[3]), int(r[0]):int(r[0]+r[2])] # Display cropped image cv2.imshow("Image", imCrop) cv2.waitKey(0) Kéo hình chữ nhật từ trên cùng bên trái xuống dưới cùng bên phảiNếu bạn giống tôi, bạn sẽ muốn kéo một hình chữ nhật từ góc trên cùng bên trái xuống góc dưới cùng bên phải thay vì kéo nó từ giữa. Chúng ta có thể dễ dàng khắc phục điều đó bằng cách thay thế dòng được đánh dấu bằng dòng sau C++bool fromCenter = false; Rect2d r = selectROI(im, fromCenter); con trănfromCenter = False r = cv2.selectROI(im, fromCenter) Cách chỉ định tên cửa sổ?Sẽ không hay sao nếu bạn có thể sử dụng một cửa sổ hiện có thay vì cửa sổ của bộ chọn ROI? C++________số 8_______ con trănfromCenter = False r = cv2.selectROI("Image", im, fromCenter) Tôi đã hợp tác độc quyền với OpenCV. org mang đến cho bạn các khóa học chính thức về Trí tuệ nhân tạo, Thị giác máy tính và Học sâu để đưa bạn vào lộ trình có cấu trúc từ những bước đầu tiên đến khi thành thạo Tìm hiểu thêm Bạn không muốn hiển thị crosshair?Giả sử bạn không thích hình chữ thập và muốn xem hình chữ nhật mà không có nó. Bạn có thể sửa đổi mã để không hiển thị dấu thập C++bool showCrosshair = false; bool fromCenter = false; Rect2d r = selectROI("Image", im, fromCenter, showCrosshair); con trănshowCrosshair = False fromCenter = False r = cv2.selectROI("Image", im, fromCenter, showCrosshair) Làm cách nào để chọn nhiều vùng quan tâm (ROI) của một hình ảnh?Chức năng selectROI cũng cho phép bạn chọn nhiều vùng quan tâm nhưng có 2 lỗi |