#python-3.x #image #opencv #image-recognition #opencv-contour
#python-3.x #изображение #opencv #контур #распознавание изображений
Вопрос:
Я обрабатываю изображение с помощью OpenCV на Python и хочу подсчитать все объекты (червей) на нем. Черви довольно светло-бежевые, тогда как фон черный (см. Рисунок), поэтому их довольно легко отличить. Проблема в том, что иногда черви располагаются слишком близко друг к другу (иногда они даже перекрываются) и cv.findContours() будет рисовать один большой контур вместо двух меньших (см. Рисунок ниже).
Поскольку я использую cv.foundContours(), я должен сначала превратить изображение в черно-белое, затем размыть его (необязательно) и, наконец, ограничить, чтобы на черном фоне были белые черви.
Я использую следующий код :
import cv2 as cv
img = cv.imread('worms.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
blur=cv.GaussianBlur(gray,(5,5),1)
ret,osu = cv.threshold(blur,0,255,cv.THRESH_BINARY cv.THRESH_OTSU)
imsource,contours,test = cv.findContours(osu,1,1)
cv.drawContours(img,contours,-1, (0,0,255),2)
Я попытался стереть пороговое изображение, но это плохо работает, так как «связь» между двумя червями довольно большая.
Спасибо за помощь
Комментарии:
1. Это, скорее, проблема классификации, чем сегментации. У вас есть база данных с достоверностью или только это изображение?
2. Вы имеете в виду изображение самого фона пустым? У меня может быть один, но я им не пользуюсь. Как вы думаете, мне следует использовать другой подход? У меня нет никаких знаний в машинном обучении
3. Классификатору, такому как SVM или KNN, нужны некоторые данные для обучения, чтобы они могли узнать, какие функции соответствуют классу, который вы ищете. В зависимости от точности подходы CNN предлагают более точные результаты, но также требуют гораздо большего количества обучающих данных. Если вы предпочитаете придерживаться «традиционного» компьютерного зрения, взгляните на сопоставление шаблонов. Сопоставление шаблонов может дать вам хорошие результаты в зависимости от контекста, но я бы все же посоветовал вам попробовать подходы к классификации, потому что они более общие (особенно подходы CNN).
4. Возможно, объединение с обнаружением границ может помочь провести различие
5. Большое спасибо, я обязательно попробую это, классификатор обнаружение границ