Перейти к содержимому
Compvision.ru

YoloY

Пользователи
  • Количество публикаций

    2
  • Зарегистрирован

  • Посещение

Репутация

0 Новичек

О YoloY

  • Звание
    Новичок
  1. На предыдущем шаге в некоторых центрах контуров рисую белые точки. Тут проверяю, если центры не белые то ставлю там большую черную точку, прорисовываю этот контур и добавляю в список, иначе добавляю в другой. Списки изначально пустые.Точки ставит верно но контура рисуются абсолютно все и естественно добавляются все в оба спискаЧто я делаю не так? for i, v in enumerate(c1): for m, z in enumerate(centers): pixel = imgcopy1[z[1], z[0]] if (pixel<200)==True: cv.circle(imvvv, z, 0, (0, 0, 255), 5) # нарисовали точки ellip = cv2.fitEllipse(v) cv2.ellipse(imvvv, ellip, (0, 0, 255), 2) dee.append(v) n = n + 1 else: deliq.append(v)
  2. Здравствуйте! Занимаюсь распознаванием эритроцитов на медицинских изображениях и при поиске эллипсов находится много вложенных. Пыталась сделать с помощью RETR EXTERNAL, но в моем случае работает не всегда. Пытаюсь сделать это с помощью центров и проверять, находится ли центр внутри оболочки, но почему то результаты странные Подскажите пожалуйста, что делаю не так и как это можно исправить import sys import numpy as np import cv2 as cv import math hsv_min = np.array((0, 77, 17), np.uint8) hsv_max = np.array((208, 255, 255), np.uint8) if __name__ == '__main__': img = cv.imread('1.png',0) imgcopy=img sigma = 0.33 # compute the median of the single channel pixel intensities v = np.median(img) # apply automatic Canny edge detection using the computed median lower = int(max(0, (1.0 - sigma) * v)) upper = int(min(255, (1.0 + sigma) * v)) blur = cv.GaussianBlur(img, (7, 7), 0) ret, thr = cv.threshold(blur, 140, 255, cv.THRESH_TRIANGLE) thr = cv.Canny(thr, lower, upper) thrcopy = cv.resize(thr, (960, 540)) cv.imshow("edged.jpg", thrcopy) # RETR_EXTERNAL удаляет внутренние эллипсы но не в моем случае contours0, hierarchy = cv.findContours(thr.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) # Find the rotated rectangles and ellipses for each contour minRect = [None] * len(contours0) minEllipse = [None] * len(contours0) for i, c in enumerate(contours0): minRect[i] = cv.minAreaRect(c) if c.shape[0] > 5: minEllipse[i] = cv.fitEllipse(c) count = 1 di=0 for i, c in enumerate(contours0): color = (0, 0, 0) colorOut = (255, 255, 255) # ellipse if c.shape[0] > 5: cv.ellipse(imgcopy, minEllipse[i], colorOut, 2) count = count + 1 # rotated rectangle для нахождения центров box = cv.boxPoints(minRect[i]) box = np.intp(box) # для нахождения центров # находим точки центров эллипсов W = minRect[1][0] H = minRect[1][1] rrr = cv.boundingRect(c) Xs = [i[0] for i in box] Ys = [i[1] for i in box] x1 = min(Xs) x2 = max(Xs) y1 = min(Ys) y2 = max(Ys) center = (int((x1 + x2) / 2), int((y1 + y2) / 2)) dist = cv.pointPolygonTest(c, center, False) if dist < 0: cv.circle(imgcopy, center, 3, (0, 255, 0), -1) di=di+1 if c.shape[0] > 5: cv.ellipse(imgcopy, minEllipse[i], color, 2) print(count - 1) print(di) print(rrr) imgcopy = cv.resize(imgcopy, (960, 540)) cv.imshow('Contoursd', imgcopy) cv.waitKey() cv.destroyAllWindows()
×