Как извлечь монеты из изображения?

#opencv

#objective-c #opencv #обработка изображений #компьютерное зрение

Вопрос:

Итак, я хочу сегментировать и извлекать монеты из изображения и использовать их для других целей. Но сначала я столкнулся с проблемами при извлечении этих монет. Фон не должен быть белым все время.

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

Я пробовал устанавливать пороговое значение и находить контуры, но оно возвращает больше контуров, чем ожидалось. Что я должен делать?

 cv::Mat coinpic, backgroundpic, diffpic, newpic, threshold;

cv::cvtColor([self cvMatFromUIImage:coins], coinpic, cv::COLOR_BGR2GRAY);

cv::threshold(coinpic, diffpic, 200, 255, cv::THRESH_BINARY_INV cv::THRESH_OTSU);

vector<vector<cv::Point>> contours;
vector<cv::Vec4i> hierarchy;

cv::findContours(diffpic, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

cout << contours.size() << endl;

return [self UIImageFromCVMat:diffpic];
  

Результат, который я ожидаю, будет похож на следующую ссылку:https://docs.opencv.org/3.4.3/d3/db4/tutorial_py_watershed.html

Комментарии:

1. Пожалуйста, добавьте больше контекста к вашему вопросу. Можете ли вы поделиться примером входного изображения, в каких условиях вы хотите, чтобы программа работала …?

2. Добавьте пример входного изображения, которое вы используете.

3. Я отредактировал свой пост, добавив пример входного изображения

Ответ №1:

Обнаружение монет — типичный пример, когда вы (скорее всего) хотите использовать преобразование Хафа для кругов. Это реализовано в OpenCV, и вы можете найти несколько примеров, например, здесь и здесь (они на Python, но вы можете найти много других)

Вероятно, вы получите больше (или не все) контуров с первой попытки, чтобы исправить это, вам следует поиграть с param1 и param2 (см. Документацию opencv)

Комментарии:

1. Но что, если Hough Circle обнаруживает не все монеты на изображении?