2014-06-12 29 views
7

Tôi đang cố gắng phát hiện hình chữ nhật bằng cách sử dụng OpenCV. Tuy nhiên, đôi khi điều này là khá khó khăn sau khi chạy phương pháp Canny, bởi vì hai trong số các cạnh thường bị xóa. Tôi đã thử nhiều bộ ngưỡng khác nhau và làm mờ nó trước khi áp dụng Canny, nhưng tôi chưa có kết quả tích cực lớn. Hiện nay, tôi sẽ không làm mờ hình ảnh, vì vậy đây là khá nhiều những gì tôi đang làm:Phát hiện cạnh bằng cách sử dụng OpenCV (Canny)

Mat imgSource = Highgui.imread(filepath); 
Imgproc.Canny(imgSource, imgSource, 300, 600, 5, true); 

Ví dụ:

original http://imagizer.imageshack.us/a/img822/8776/27i9j.jpg Canny http://imagizer.imageshack.us/a/img841/9868/wkc95.jpg

Sau đó, tôi đang cố gắng phương pháp findContours của OpenCV để phát hiện hình chữ nhật, nó hoạt động 80% thời gian, làm thế nào tôi có thể cải thiện nó?

+0

làm điểm bắt đầu, hãy thử làm cvtColor (imgSource, imgSource, CV_BGR2GRAY); ngưỡng (imgSource, imgSource, 25,255, THRESH_BINARY); và sau đó findContours –

Trả lời

7

Hãy thử với giá trị ngưỡng khác nhau, trong trường hợp này, bạn sẽ nhận được kết quả tốt hơn khi sử dụng các giá trị ngưỡng thấp hơn, chẳng hạn như 10.100.

blur(src,src,Size(3,3)); 
cvtColor(src,tmp,CV_BGR2GRAY); 
Canny(src, thr, 10, 100, 3); 

Hoặc theo cách khác, bạn sẽ nhận được những hình ảnh đường viền bằng cách áp dụng threshold như,

threshold(tmp,thr,50,255,THRESH_BINARY_INV); 
2

vấn đề ở đây là nén hình ảnh dạng file JPEG lẽ.
thử hình ảnh chuyển đổi sang đơn sắc vì bạn chỉ có Đen/trắng ảnh và chỉnh sửa các giá trị ngưỡng.
điều này sẽ loại bỏ nhiễu xung quanh các cạnh của đường kẻ. sau đó có thể được áp dụng với bất kỳ giá trị nào.

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