Рубрики
Без рубрики

Обнаружение объекта с цветом

Обнаружение объекта с цветом В этом проекте я работал над обнаружением объекта, пытался плавничать … Помечено с Computerivery, OpenCV, Python, ObjectDection.

В этом проекте я работал над обнаружением объекта, попытался найти координаты, ширину, высоту объекта (в этом объекте проекта – это синие вещи).

Использование цветовой диапазоны 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”