Rate this post

Đường bao được định nghĩa là một đường cong nối tất cả các điểm liên tục (dọc theo đường biên), có cùng màu hoặc cường độ. Ngược lại, chúng ta tìm bộ đếm trong một ảnh nhị phân, chúng ta lấy nét để tìm ranh giới trong ảnh nhị phân. Định nghĩa chính thức như sau:

Các bài viết liên quan:

Giới thiệu về Contours

Contours (đường viền) là một khái niệm quan trọng trong xử lý ảnh và được sử dụng rộng rãi trong thư viện OpenCV. Contours là các đường cong liên tục đại diện cho các đối tượng trong ảnh. Đường viền được tạo thành từ việc nối các điểm ảnh có cùng giá trị màu hoặc cùng thuộc tính trong ảnh.

Trong OpenCV, việc tìm và xử lý contours được thực hiện bằng một loạt các bước. Đầu tiên, ta cần tìm contours trong ảnh sử dụng các phương pháp như Canny Edge Detection hoặc Thresholding. Sau đó, ta có thể xử lý và lọc contours bằng các phép biến đổi hình học như loại bỏ contours nhỏ, tiếp giáp contours, hay làm mờ contours. Contours cũng có thể được sử dụng để trích xuất thông tin về hình dạng, vị trí và kích thước của các đối tượng trong ảnh.

Xem thêm OpenCV là gì? tìm hiểu OpenCV

Ứng dụng của Contours trong xử lý ảnh là rất đa dạng. Chúng có thể được sử dụng để phát hiện và phân tích hình dạng, định vị và nhận dạng đối tượng, xử lý và nhận biết chữ viết tay, phát hiện vật thể và đối tượng trong thời gian thực, và nhiều ứng dụng khác. Contours cung cấp thông tin quan trọng về hình dạng và đặc trưng của các đối tượng trong ảnh, giúp cho việc phân tích và xử lý ảnh trở nên dễ dàng và hiệu quả hơn.

Tóm lại, contours là một khái niệm quan trọng trong xử lý ảnh, cho phép chúng ta trích xuất, xử lý và phân tích thông tin về các đối tượng trong ảnh. Sử dụng OpenCV, ta có thể thực hiện các phương pháp và thuật toán liên quan đến contours để thực hiện nhiều tác vụ khác nhau trong xử lý ảnh.

Để duy trì độ chính xác, chúng ta nên sử dụng các hình ảnh nhị phân. Đầu tiên, chúng tôi áp dụng ngưỡng hoặc phát hiện cạnh canny.

Trong OpenCV, việc tìm đường viền trong ảnh nhị phân cũng giống như việc tìm đối tượng màu trắng từ nền đen.

OpenCV cung cấp findContours (), được sử dụng để tìm đường bao trong hình ảnh nhị phân. Cú pháp như sau:

FindContours () chấp nhận ba đối số đầu tiên là hình ảnh nguồn, thứ hai là chế độ truy xuất đường viền và thứ ba là xấp xỉ đường viền.

Hãy xem xét ví dụ sau:

Xem thêm Cài đặt OpenCV: Hướng dẫn chi tiết

Các bước xử lý Contours trong OpenCV

Trong OpenCV, để xử lý contours, chúng ta có thể thực hiện các bước sau:

  1. Tiền xử lý ảnh (Preprocessing):
    • Chuyển đổi ảnh sang ảnh đen trắng (grayscale) nếu cần thiết.
    • Áp dụng các phép biến đổi như làm mờ (blurring) hoặc làm nổi bật biên (edge enhancement) để loại bỏ nhiễu và tăng cường đặc trưng.
  2. Tìm contours:
    • Áp dụng phương pháp phát hiện biên như Canny Edge Detection hoặc Thresholding để tạo ra ảnh nhị phân.
    • Sử dụng hàm findContours trong OpenCV để tìm các contours trong ảnh nhị phân.
    • Đảm bảo chỉ lấy các contours cần thiết bằng cách xác định ngưỡng diện tích tối thiểu hoặc loại bỏ các contours nhỏ.
  3. Xử lý và lọc contours:
    • Làm mờ contours bằng cách sử dụng Gaussian Blur hoặc Median Blur để làm giảm độ rối và loại bỏ chi tiết không mong muốn.
    • Loại bỏ các contours không cần thiết bằng cách xác định tiêu chí như diện tích, chu vi hoặc hình dạng.
    • Tiếp giáp (approximate) các contours để giảm số lượng điểm và làm nổi bật hình dạng chính.
  4. Trích xuất thông tin từ contours:
    • Tính toán diện tích, chu vi, hướng, tọa độ bounding box và các đặc trưng khác của các contours.
    • Sử dụng các hàm như contourArea, arcLength, boundingRect để lấy thông tin cần thiết từ các contours.
  5. Vẽ và hiển thị contours:
    • Sử dụng hàm drawContours để vẽ contours lên ảnh gốc hoặc ảnh khác.
    • Hiển thị ảnh kết quả để kiểm tra và xem các contours đã được xử lý và lọc.

Các bước trên chỉ là một hướng dẫn tổng quan và có thể thay đổi tùy thuộc vào nhu cầu và tình huống cụ thể. Tuy nhiên, chúng cung cấp một khung cơ bản để xử lý và làm việc với contours trong OpenCV.

Xem thêm Sử dụng Python Computer Vision với OpenCV

Làm thế nào để vẽ các đường viền?

OpenCV cung cấp hàm cv2.drawContours (), được sử dụng để vẽ các đường bao. Nó cũng được sử dụng để vẽ bất kỳ hình dạng nào bằng cách cung cấp các điểm ranh giới của nó. Cú pháp của hàm cv2.drawContours () được đưa ra dưới đây:

Để vẽ tất cả các đường viền trong một hình ảnh:

Để vẽ một đường bao riêng lẻ, giả sử bộ đếm thứ 3

Đối số đầu tiên đại diện cho nguồn hình ảnh, đối số thứ hai đại diện cho các đường bao sẽ được chuyển dưới dạng danh sách Python, đối số thứ ba được sử dụng làm chỉ mục của Đường viền và các đối số khác được sử dụng cho độ dày màu.

Phương pháp xấp xỉ đường viền

Đây là đối số thứ ba trong cv2.findCounter (). Ở trên, chúng tôi đã mô tả nó để vẽ ranh giới của hình dạng với cùng cường độ. Nó lưu trữ các tọa độ (x, y) của ranh giới của một hình dạng. Nhưng ở đây câu hỏi đặt ra là nó có lưu trữ tất cả các tọa độ không? Điều đó được xác định bằng phương pháp xấp xỉ đường bao.

Nếu chúng ta vượt qua cv.CHAIN_APPROX_NONE , nó sẽ lưu trữ tất cả các điểm ranh giới. Đôi khi nó không cần phải lưu trữ tất cả các tọa độ điểm, giả sử chúng ta tìm thấy các đường bao của một đoạn thẳng mà nó không yêu cầu phải lưu trữ tất cả các điểm đồng mức, nó chỉ yêu cầu hai điểm cuối để lưu trữ. Vì vậy, đối với trường hợp như vậy, chúng tôi sử dụng cv.CHAIN_APPROX_NONE , nó loại bỏ tất cả các điểm dư thừa và nén các đường viền, do đó tiết kiệm bộ nhớ.

Trong hình ảnh chữ nhật ở trên, hình ảnh đầu tiên hiển thị các điểm sử dụng với cv.CHAIN_APPROX_NONE (734) và hình ảnh thứ hai hiển thị điểm với cv2.CHAIN_APPROX_SIMPLE (chỉ 4 điểm) . Chúng ta có thể thấy sự khác biệt giữa cả hai hình ảnh.

Xem thêm Các tính năng của OpenCV mà bạn không thể bỏ qua vào năm 2022

Ứng dụng của Contours trong xử lý ảnh

Contours trong xử lý ảnh có nhiều ứng dụng hữu ích. Dưới đây là một số ví dụ về ứng dụng của Contours:

  1. Phát hiện và định vị đối tượng: Contours có thể được sử dụng để phát hiện và định vị các đối tượng trong ảnh. Với việc xác định các đặc trưng của contours như diện tích, chu vi và hình dạng, ta có thể nhận biết và phân loại các đối tượng khác nhau trong ảnh.
  2. Phát hiện biên độc lập: Contours có thể được sử dụng để phát hiện các biên độc lập trong ảnh. Bằng cách tìm các contours có diện tích nhất định và loại bỏ các contours nhỏ, ta có thể xác định được các vùng chứa các biên độc lập.
  3. Đo lường kích thước và hình dạng: Contours cung cấp thông tin về diện tích, chu vi, hình dạng và hướng của các đối tượng trong ảnh. Điều này cho phép ta đo lường và phân tích kích thước, tỉ lệ, góc xoay và các đặc trưng hình học khác của các đối tượng.
  4. Định vị và nhận dạng vật thể: Bằng cách sử dụng contours, ta có thể định vị và nhận dạng các vật thể trong ảnh. Các đặc trưng của contours như diện tích, hình dạng và sự kết hợp có thể được sử dụng để so sánh với các mẫu đã biết và nhận dạng các vật thể tương ứng.
  5. Xử lý ảnh và phân vùng: Contours có thể được sử dụng để xử lý ảnh và phân vùng các vùng quan trọng trong ảnh. Bằng cách sử dụng các phép biến đổi hình học và xử lý contours, ta có thể tách riêng các vùng quan tâm và áp dụng các phương pháp xử lý tiếp theo.
  6. Phân tích chữ viết tay: Contours có thể được sử dụng để phân tích và nhận dạng chữ viết tay. Bằng cách xác định các contours của các ký tự, ta có thể tách riêng chữ viết tay và áp dụng các thuật toán nhận dạng chữ viết tay để xử lý.

Tóm lại, contours trong xử lý ảnh có nhiều ứng dụng quan trọng như phát hiện và định vị đối tượng, phân tích hình dạng, phân vùng và nhận dạng vật thể. Chúng cung cấp một phương pháp mạnh mẽ để xử lý và trích xuất thông tin từ ảnh.

Lợi ích và giới hạn của việc sử dụng Contours trong OpenCV

Sử dụng contours trong OpenCV mang lại nhiều lợi ích và cung cấp khả năng linh hoạt trong xử lý và phân tích ảnh. Tuy nhiên, cũng có một số giới hạn cần lưu ý. Dưới đây là lợi ích và giới hạn của việc sử dụng contours trong OpenCV:

Lợi ích của việc sử dụng contours trong OpenCV:

  1. Phát hiện và trích xuất đối tượng: Contours cho phép phát hiện và trích xuất đối tượng trong ảnh. Bằng cách xác định các đặc trưng của contours như diện tích, chu vi và hình dạng, ta có thể nhận biết và phân loại các đối tượng khác nhau.
  2. Định vị và đo lường đặc trưng: Contours cung cấp thông tin về diện tích, chu vi, hình dạng và hướng của các đối tượng trong ảnh. Điều này cho phép ta định vị và đo lường các đặc trưng quan trọng của đối tượng, như kích thước, tỉ lệ, góc xoay và vị trí.
  3. Phân vùng và tách riêng vùng quan tâm: Contours có thể được sử dụng để phân vùng và tách riêng các vùng quan tâm trong ảnh. Bằng cách xác định và xử lý các contours, ta có thể tạo ra các vùng phân vùng riêng biệt và áp dụng các phương pháp xử lý tiếp theo cho từng vùng.
  4. Nhận dạng và phân loại: Các đặc trưng của contours có thể được sử dụng để nhận dạng và phân loại các đối tượng trong ảnh. Bằng cách so sánh các đặc trưng của contours với các mẫu đã biết, ta có thể nhận dạng và phân loại các đối tượng tương ứng.

Giới hạn của việc sử dụng contours trong OpenCV:

  1. Nhạy cảm với nhiễu: Contours có thể bị ảnh hưởng bởi nhiễu trong ảnh. Nếu ảnh chứa nhiễu hoặc biên đối tượng không rõ ràng, việc xác định contours có thể trở nên khó khăn và không chính xác.
  2. Phụ thuộc vào tiền xử lý: Kết quả của việc xác định contours có thể phụ thuộc vào quá trình tiền xử lý ảnh. Nếu không thực hiện tiền xử lý tốt, contours có thể không được xác định chính xác.
  3. Độ phức tạp tính toán: Xác định và xử lý contours có thể yêu cầu tính toán phức tạp, đặc biệt là khi ảnh có kích thước lớn và chứa nhiều đối tượng. Điều này có thể ảnh hưởng đến hiệu suất và thời gian xử lý của ứng dụng.

Tổng quan, contours trong OpenCV mang lại nhiều lợi ích cho việc xử lý và phân tích ảnh, tuy nhiên cần lưu ý các giới hạn và thực hiện tiền xử lý ảnh thích hợp để đạt được kết quả chính xác.

Xem thêm Cách đọc, hiển thị và lưu hình ảnh trong OpenCV

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now