Получение цвета и направления стрелки openCv python
День добрый, требуется ваша помочь, нужно определить цвет фигуры и направления стрелки от 0 до 360 градусов. Уже несколько часов думаю над этой задачей, ничего в голову не приходит.
import numpy as np
import cv2 as cv
hsv_min = np.array((0, 50, 50), np.uint8)
hsv_max = np.array((187, 255, 253), np.uint8)
if __name__ == '__main__':
img = cv.imread('img.png')
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
thresh = cv.inRange(hsv, hsv_min, hsv_max)
contours, _ = cv.findContours(thresh.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)
for cnt in contours:
rect = cv.minAreaRect(cnt)
area = int(rect[1][0]*rect[1][1])
if area < 300:
continue
box = cv.boxPoints(rect)
box = np.int0(box)
cv.drawContours(img, [box], -1, (255, 0, 0), 2)
cv.imshow('contours', img)
cv.waitKey()
cv.destroyAllWindows()
Ответы (1 шт):
Автор решения: Alex Alex
→ Ссылка
Так как стрелка наиболее насыщенный по цвету объект, то ее можно выделить в HSV пространстве бинаризацией по порогу. Используя дистанционное преобразование можно найти острие стрелки. Центроид стрелки находим через моменты. Далее, думаю, все понятно.
import cv2
import numpy as np
file = "qpgqP.png"
original = cv2.imread(file)
hsv = cv2.cvtColor(original, cv2.COLOR_BGR2HSV)
(_ret, threshold) = cv2.threshold(hsv[:,:,1], 90, 255, cv2.THRESH_OTSU)
dist = cv2.distanceTransform(threshold, cv2.DIST_L2, cv2.DIST_MASK_PRECISE)
idx=np.argmax(dist)
y,x=np.unravel_index(idx, dist.shape) #corner position
color=original[y,x,:]
M = cv2.moments(threshold)
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])
print(180*np.arctan2(x-cX, y-cY)/np.pi, 'degrees')
print(color[::-1], 'rgb color')

