#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 обнаруживает не все монеты на изображении?