Как найти количество кругов или количество объектов на этом изображении - PullRequest
0 голосов
/ 08 июня 2018

Изображение, из которого я хочу узнать количество объектов / окружностей.

Я хочу найти Общее количество окружностей / узлов на этом изображении, используя OpenCV с C ++.

Для которого я написал этот код:

src = imread("src.bmp");   //src is source image 
cvtColor(src, src_gray, CV_BGR2GRAY);   // Gray scale convert
Mat bw = src_gray > 128;
imshow("Gray Scaled Source",src_gray);  

Canny(src_gray, canny_output, thresh, thresh * 2, 3); /// Detect edges using canny


/// Find contours
findContours(canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));

/// Draw contours
drawing = Mat::zeros(canny_output.size(), CV_8UC3);

cout<<contours.size();   // total no of contours

По этому коду мой ответ: 117

Но правильный ответ: 62

1 Ответ

0 голосов
/ 08 июня 2018

Вы можете использовать следующий код для извлечения круга / объектов из заданного изображения.

Mat src, src_gray,binarySeg;
vector< vector <Point> > contours;
vector <Vec4i> hierarchy;

src = imread("src.bmp");
cvtColor(src, src_gray, CV_BGR2GRAY);
threshold(src_gray,binarySeg,75,255,CV_THRESH_BINARY);
morphologyEx(binarySeg,binarySeg,MORPH_DILATE,Mat::ones(3,3,CV_32F),Point(-1,-1),1);

findContours(binarySeg, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
cout<<contours.size(); 

Что здесь происходит, вы сначала пороговаете изображение, основываясь на заданных вами значениях.Затем вы делаете расширенные операции по удалению небольших участков.После этого вы найдете количество контуров.


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...