2012-07-24 38 views
9

Tôi cần tính diện tích của một đốm màu/đối tượng trong ảnh màu xám (tải nó dưới dạng Mat, không phải là IplImage) bằng cách sử dụng OpenCV. Tôi nghĩ sẽ là một ý tưởng tốt để có được tọa độ của các cạnh (số cạnh thay đổi đối tượng dạng đối tượng) hoặc để lấy tất cả các tọa độ của đường bao và sau đó sử dụng contourArea() để tính diện tích đối tượng của tôi.Tính diện tích của một đối tượng với OpenCV

Tôi đã xóa tất cả tạp âm và có một số đường nét đẹp và thỏa mãn bằng cách sử dụng findContours() (lập trình tại C++).

findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy,int mode, int method, Point offset=Point()); 

Bây giờ tôi đã hiểu rằng thông số contours đã sở hữu tọa độ của tất cả các đường nét của đối tượng của tôi. Tôi có đúng không?

Nếu có, có cách nào truy cập chúng không?

Và nếu không, làm thế nào để tôi có được tọa độ của đường bao?

Trả lời

23

contours là thực sự định nghĩa là

vector<vector<Point> > contours; 

Và bây giờ tôi nghĩ rằng nó là rõ ràng làm thế nào để truy cập điểm của nó.

Diện tích đường viền được tính bằng một hàm độc đáo gọi là contourArea():

for (unsigned int i = 0; i < contours.size(); i++) 
{ 
    std::cout << "# of contour points: " << contours[i].size() << std::endl; 

    for (unsigned int j=0; j<contours[i].size(); j++) 
    { 
     std::cout << "Point(x,y)=" << contours[i][j] << std::endl; 
    } 

    std::cout << " Area: " << contourArea(contours[i]) << std::endl; 
} 
+1

Cảm ơn rất nhiều! Phải mất một thời gian ngắn để hiểu những gì bạn đang làm, nhưng theo như tôi có thể nói từ bây giờ nó hoạt động :) Đã được ngồi trên vấn đề này trong nhiều ngày không nhìn thấy bất kỳ giải pháp ... – Temer

+0

Đọc tài liệu sẽ giúp bạn tiết kiệm rất nhiều thời gian :) . Mã mẫu mẫu đi kèm với OpenCV cũng rất tuyệt. – Sam

Các vấn đề liên quan