Khớp hình ảnh opencv python
Trong bài viết này, chúng tôi trình bày cách khớp một hình ảnh được nhúng trong một hình ảnh khác trong Python bằng mô-đun OpenCV Show OpenCV có các chức năng có thể thực hiện các tìm kiếm được nhắm mục tiêu trong một hình ảnh lớn hơn cho một hình ảnh được nhúng trong đó, giả sử chúng tôi cung cấp cho nó hình ảnh mục tiêu để tìm kiếm Điều này được gọi là đối sánh mẫu OpenCV có chức năng, cv2. matchTemplate(), cho phép chúng tôi tìm kiếm một hình ảnh được nhúng trong một hình ảnh khác (lớn hơn) và chúng tôi có thể xem liệu chúng tôi có thể tìm thấy hình ảnh này không Điều này có thể có nhiều ứng dụng hữu ích như khám phá xem một đối tượng có nằm trong một hình ảnh rất cồng kềnh hay không Vì vậy, trong ví dụ này, giả sử, chúng ta có hình ảnh sau được hiển thị bên dưới Bây giờ chúng tôi có một phần của hình ảnh này dưới dạng hình ảnh độc lập được hiển thị bên dưới. Chúng tôi đã loại bỏ phần này ra khỏi hình ảnh gốc. Điều này tượng trưng cho lá vàng Vì vậy, chúng tôi đã loại bỏ phần này khỏi hình ảnh Rainforest ban đầu. Hình ảnh này chứa một chiếc lá vàng Sử dụng OpenCV, chúng tôi xác định vị trí hình ảnh mục tiêu trong hình ảnh lớn hơn mà chúng tôi đang tìm kiếm nó và vẽ một hình chữ nhật xung quanh kết quả khớp Điều này cho chúng ta hình ảnh sau đây được hiển thị bên dưới Vì vậy, bây giờ chúng ta hãy chuyển sang viết mã để xem điều này được thực hiện như thế nào. Mã đầy đủ được hiển thị bên dưới Bây giờ chúng ta hãy đi qua mã này Chúng tôi nhập mô-đun OpenCV Sau đó, chúng tôi tạo một biến, hình ảnh, chứa hình ảnh mà chúng tôi muốn tìm kiếm. Trong trường hợp này, đó là 'Rừng nhiệt đới. png' Chúng tôi hiển thị hình ảnh này Sau đó, chúng tôi tạo một phiên bản thang độ xám của hình ảnh này. Điều này đơn giản hóa hình ảnh Sau đó, chúng tôi tạo một biến khác, mẫu, đại diện cho tập hợp con hình ảnh mà chúng tôi muốn tìm kiếm trong hình ảnh lớn hơn, hình ảnh ('Rainforest. png'). Hình ảnh này được đặt tên là 'Yellowing-leaf. png' Sau đó, chúng tôi có một biến khác, kết quả, về cơ bản lưu trữ liệu có tìm thấy kết quả phù hợp hay không Sau đó, chúng tôi tạo một bộ giá trị cho phép chúng tôi có được vị trí của trận đấu, giả sử có trận đấu. Biến, max_loc, đại diện cho Tiếp theo, chúng tôi có một bộ khác, chiều cao và chiều rộng, chứa chiều cao và chiều rộng của hình ảnh mẫu hoặc hình ảnh đích mà chúng tôi đang tìm kiếm trong hình ảnh lớn hơn. Chúng tôi có những giá trị này bởi vì chúng tôi sẽ làm nổi bật hình ảnh sau khi tìm thấy Sau đó, chúng tôi có một biến, đối diện_corner, đại diện cho phía dưới bên phải của hình chữ nhật mà chúng tôi sẽ tạo. Nếu chúng ta lấy max_loc[0] và thêm chiều rộng và max_loc[1] và thêm chiều cao, chúng ta sẽ có được góc dưới cùng bên phải max_loc đại diện cho góc trên cùng bên trái Sau đó chúng tôi sử dụng cv2. Chức năng hình chữ nhật () để vẽ một hình chữ nhật xung quanh trận đấu. Chúng tôi làm điều này với màu đỏ với độ dày của dòng là 5 Chúng tôi sử dụng cv2. hàm matchShapes() để khớp hai hình dạng hình ảnh. Hàm này trả về một số liệu cho thấy sự giống nhau giữa các hình dạng hình ảnh. Hàm này sử dụng Hu-Moments để tính giá trị số liệu. Giá trị số liệu thấp hơn, độ tương tự giữa các hình ảnh cao hơn Trong các ví dụ sau, chúng tôi sẽ khớp các hình dạng từ các hình ảnh khác nhau và cả các hình dạng từ một hình ảnh duy nhất cú phápChúng tôi sử dụng cú pháp sau để khớp hai hình dạng hình ảnh - ret = cv2.matchShapes(cnt1,cnt1,1,0.0) Ở đâu,
bướcBạn có thể sử dụng các bước sau để khớp hai hình ảnh – Nhập thư viện cần thiết. Trong tất cả các ví dụ Python sau, thư viện Python bắt buộc là OpenCV. Hãy chắc chắn rằng bạn đã cài đặt nó import cv2 Đọc hình ảnh đầu vào dưới dạng hình ảnh thang độ xám bằng cv2. imread() img1 = cv2.imread('star.png',0) img2 = cv2.imread('star1.png',0) Áp dụng ngưỡng trên các hình ảnh thang độ xám để tạo các hình ảnh nhị phân ret,thresh1 = cv2.threshold(img1,150,255,0) ret,thresh2 = cv2.threshold(img1,150,255,0) Tìm các đường viền của các hình dạng trong các hình ảnh nhị phân bằng cách sử dụng cv2. hàm findContours() contours1, _ = cv2.findContours(thresh1, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) contours2, _ = cv2.findContours(thresh2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) Chọn đường viền cụ thể từ mỗi hình ảnh và áp dụng chức năng đối sánh hình dạng cv2. matchShapes() đi qua các đường viền đã chọn cnt1=contours1[0] cnt2=contours2[0] ret12 = cv2.matchShapes(cnt1, cnt2, 1, 0.0) In giá trị kết quả, số liệu khớp hình ảnh. Giá trị càng thấp thì càng phù hợp print("Matching Image 1 with Image 2:", ret12) Hãy xem xét một số ví dụ để hiểu rõ hơn ví dụ 1Trong chương trình này, chúng tôi khớp hai hình ảnh. Mỗi hình ảnh chứa một hình dạng duy nhất. Chúng tôi cũng khớp hình dạng với chính nó từ mỗi hình ảnh Hãy coi những hình ảnh dưới đây là những hình ảnh đầu vào được đề cập là 'ngôi sao. png' và 'ngũ giác. png' trong chương trình trên đầu raKhi thực thi, đoạn mã trên sẽ tạo ra đầu ra sau - Number of Shapes detected in Image 1: 1 Number of Shapes detected in Image 2: 1 Matching Image 1 with itself: 0.0 Matching Image 2 with itself: 0.0 Matching Image 1 with Image 2: 0.6015851094057714 ví dụ 2Trong chương trình này, chúng tôi khớp các hình dạng trong hình ảnh. Chúng tôi phát hiện ba hình dạng trong hình ảnh Chúng tôi sẽ sử dụng hình ảnh sau đây và Tệp đầu vào trong chương trình này - đầu raKhi thực thi, đoạn mã trên sẽ tạo ra đầu ra sau - ________số 8Và chúng tôi nhận được cửa sổ sau, hiển thị đầu ra - Trên cơ sở kết quả trên, chúng tôi kết luận rằng Hình dạng 1 giống với Hình dạng 2 hơn Hình dạng 3 Làm cách nào để khớp một hình ảnh được nhúng trong một hình ảnh khác trong Python bằng OpenCV?OpenCV có chức năng, cv2. matchTemplate() , cho phép chúng tôi tìm kiếm một hình ảnh được nhúng trong một hình ảnh khác (lớn hơn) và chúng tôi có thể xem liệu chúng tôi có thể tìm thấy hình ảnh này không. Điều này có thể có nhiều ứng dụng hữu ích như khám phá xem một đối tượng có nằm trong một hình ảnh rất cồng kềnh hay không.
Mẫu đối sánh hoạt động như thế nào trong OpenCV?Tính năng khớp mẫu hoạt động như thế nào? . Hình ảnh mẫu chỉ cần trượt trên hình ảnh đầu vào (như trong tích chập 2D) Mẫu và bản vá của hình ảnh đầu vào bên dưới hình ảnh mẫu được so sánh Kết quả thu được được so sánh với ngưỡng Đầu ra của cv2 matchTemplate là gì?Kết quả đầu ra từ cv2. matchTemplate là ma trận có kích thước không gian. Chiều rộng. hình ảnh. hình dạng[1] - mẫu .
Làm cách nào để phát hiện đối tượng trong ảnh bằng OpenCV?Nhận dạng hoặc phát hiện đối tượng trong hình ảnh . # Nhập mô-đun OpenCV nhập cv2 # Nhập pyplot từ matplotlib dưới dạng plt từ matplotlib nhập pyplot dưới dạng pltd # Mở hình ảnh từ tập tin hình ảnh = cv2. imread("opencv-od. png") # Thay đổi thuộc tính của hình ảnh với cv2 image_gray = cv2. cvtColor(hình ảnh, cv2 |