Чтобы показать границу вокруг определенного цвета на изображении, используя opencv в python - PullRequest
0 голосов
/ 24 мая 2018

На самом деле я работаю над определением цвета в Python, используя OpenCV, и я хочу показать границу вокруг красного цвета. Вот мой код Python.

import cv2
import numpy as np


cap = cv2.VideoCapture(0)

while(1):

  _, frame = cap.read()
  frame=np.fliplr(frame)
  hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

  lower_red = np.array([0,170,175])
  upper_red = np.array([20,255,255])

  mask = cv2.inRange(hsv, lower_red, upper_red)
  res = cv2.bitwise_and(frame,frame, mask= mask)
  kernel = np.ones((15,15),np.float32)/225
  smoothed = cv2.filter2D(res,-1,kernel)
  cv2.imshow('Original',frame)
  cv2.imshow('Averaging',smoothed)
  _, puck = cv2.threshold(smoothed, 30, 255, cv2.THRESH_BINARY)
  cv2.imshow('Puck',puck)
  k = cv2.waitKey(5) & 0xFF
  if k == 27:
    break

cv2.destroyAllWindows()
cap.release()

Я могу найти красный цвет, но у меня естьнекоторая путаница, чтобы определить положение области, где происходит цвет.Спасибо

1 Ответ

0 голосов
/ 24 мая 2018

Вы можете получить список координат, используя numpy.where() на mask.mask - это одноканальное изображение, имеющее [255] для областей с красным цветом и [0] для областей без него

indices = np.where(mask!= [0])
coordinates = zip(indices[0], indices[1])
  • Я использовал метод numpy.where () для полученияиндексы кортежей двух массивов, где первый массив содержит координаты x белых точек, а второй массив содержит координаты y белых пикселей.

indices возвращает:

(array([375, 375, 375, ..., 915, 915, 915], dtype=int64),
 array([496, 497, 498, ..., 420, 421, 422], dtype=int64))
  • Затем я использовал метод zip(), чтобы получить список кортежей, содержащих эти координаты с красным цветом.

Печать координат дает мне список координат красного цвета

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...