Поиск кругов обработка изображений


Я использую opencv и java, чтобы найти круги на изображении, у меня есть изображение ниже до сих пор. Я использую Hough, чтобы найти круги с кодом следующим образом:

    Imgproc.medianBlur(result, result, 3);
    Imgproc.medianBlur(result, result, 3);
    Imgproc.medianBlur(result, result, 3);
    Mat circles = new Mat();
    Imgproc.HoughCircles(result, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 1, 200, 100, 30, 40);
    System.out.println(circles.dump());

Но я получаю пустой мат для результата с размытием и без него. Как мне исправить этот код?

Введите описание изображения здесь

Редактировать: Привет, ребята!

Благодаря вам у меня теперь есть эта картина. Я использую следующие параметры:
Imgproc.HoughCircles(result, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 20, 50, 10, 10, 40);

Я все еще использую medianBlur до обнаружения.

Единственный вопрос левый-почему он обнаруживает эти маленькие круги? Я приложил результат хитрого обнаружения, я думаю, что круги довольно заметны .

Введите описание изображения здесьВведите описание изображения здесь

3 2

3 ответа:

Во-первых, структура circles не должна быть cv::Mat, а должна быть std::vector<cv::Vec3f>; я думаю, именно поэтому вы не получаете никаких результатов.. Пожалуйста, обратитесь к документации на HoughCircles для получения подробной информации..

Играя со значениями в течение 5 минут, у меня есть для вас эта отправная точка:

Введите описание изображения здесь

Параметры, которые я использовал,

cv::medianBlur(test_Circle, test_Circle, 7);
std::vector<cv::Vec3f> circles; // <- not that "circles" is not cv::Mat
cv::HoughCircles(test_Circle, circles, CV_HOUGH_GRADIENT, 1, 1, 300, 10, 10, 50);

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

PS-так как я с++ пользователь, пожалуйста, извините меня за то, что я помещаю все свои структуры в этот формат. Вы можете легко расширить логику на Java. :)

Вы уверены, что предоставляете радиус, а не Диаметр? Попробуйте использовать более широкий диапазон радиусов (например, 10-100).

Использование OpenCV для мошенничества в Zuma? :)

Я протестировал свой код, он написан на C# (я думаю, что java то же самое) и получил результат:1

Вы можете найти мой код в HoughAlgorithm.классе по информатике Мой демо-проект Здесь

    //DP_Resolution: 1
//MinDistance :32
//CannyThreshold: 10
//AccuThreshold: 10
//MinRadius: 13
//MaxRadius: 20

public static CvSeq DetectCircles(IplImage pImage, CamEnum _camName)
{
    try
    {
        CvMemStorage memStorage = cvlib.CvCreateMemStorage(0);
        return cvlib.CvHoughCircles(ref pImage, memStorage.ptr, 3, 1, 32, 10, 10, 13, 20);
    }
    catch
    {
        throw;
    }
}

Http://i.stack.imgur.com/pUqbh.png