В этом проекте я работал над обнаружением объекта, попытался найти координаты, ширину, высоту объекта (в этом объекте проекта – это синие вещи).
Использование цветовой диапазоны HSV, который определяется как нижний и верхний, я обнаружил красочный объект. Здесь я предпочел голубые предметы.
# blue HSV blueLower = (84, 98, 0) blueUpper = (179, 255, 255)
Когда я получил цветовой диапазон, я устанавливаю размер захвата, а затем читаю захват.
Сначала я применить гауссовое размытие для уменьшения шумов и деталей в захвате.
#blur blurred = cv2.GaussianBlur(imgOriginal, (11,11), 0)
После гауссовского размытия я преобразую это в цветной формат HSV.
# HSV hsv = cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV)
Чтобы обнаружить синий объект, я определяю маску.
# mask for blue mask = cv2.inRange(hsv, blueLower, blueUpper)
После маски я должен очистить вокруг маскированного объекта. Поэтому я применяю первую эрозию, а затем расширение
# deleting noises which are in area of mask mask = cv2.erode(mask, None, iterations=2) mask = cv2.dilate(mask, None, iterations=2)
После удаления шумов контуры должны быть найдены
contours, _ = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) center = None
Если контуры были найдены, я получу самый большой контур, который будет хорошо.
# get max contour c = max(contours, key=cv2.contourArea)
Контуры, которые обнаруживаются, должны быть превращены в прямоугольник DEU, чтобы положить прямоугольник их вокруг. Эта функция CV2.MinAreareCt () возвращает прямоугольник, который наименьший, чтобы покрыть область объекта.
rect = cv2.minAreaRect(c)
На экране я хочу распечатать информацию прямоугольника, поэтому мне нужно добраться до своей информирования.
((x,y), (width, height), rotation) = rect s = f"x {np.round(x)}, y: {np.round(y)}, width: {np.round(width)}, height: {np.round(height)}, rotation: {np.round(rotation)}"
Используя этот прямоугольник, я нашел, я хочу получить коробку. В следующем я буду использовать эту коробку для рисования прямоугольника.
# box box = cv2.boxPoints(rect) box = np.int64(box)
Момент изображения – это определенный конкретный средневзвешенный средний (момент) интенсивностей пикселей изображения. Чтобы найти импульс, я использую макс. Контур под названием «C». После этого я нахожу центральную точку.
# moment M = cv2.moments(c) center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
Теперь я нарисую центр, который найден.
# point in center cv2.circle(imgOriginal, center, 5, (255, 0, 255), -1)
После центральной точки я рисую контур
# draw contour cv2.drawContours(imgOriginal, [box], 0, (0, 255, 255), 2)
Я хочу печатать координаторы и т. Д. На экране
# print inform cv2.putText(imgOriginal, s, (25, 50), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (255, 255, 255), 2)
И финал:
Ссылка на проект: https://github.com/ierolsen/object-detection-with-openc/blob/main/4-object-detection-with-color.py.
Вы можете найти больше в моем Github: https://github.com/ierolsen/Object-Detection-with-OpenCV
Оригинал: “https://dev.to/erol/object-detection-with-color-knl”