Как я могу получить только четыре угла повернутого прямоугольника? - PullRequest
1 голос
/ 18 июня 2020

Я использую этот код для обнаружения четырех углов прямоугольника, но из-за волн пикселей я получаю результат ниже, что означает, что я получаю много очков, как я могу получить только 4 угла (topRight, topLeft, bottomRight, bottomLeft ), а не все пиксельные волны?

Примечание я использую opencv с python

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
low_red1 = np.array([0,70,25])
high_red1 = np.array([10,255,255])

low_red2 = np.array([160,70,25])
high_red2 = np.array([180,255,255])

mask0 = cv2.inRange(hsv, low_red1, high_red1)
mask1 = cv2.inRange(hsv, low_red2, high_red2)
mask = mask0+mask1
cv2.imshow("mask", mask)

contours,_ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0,200,0),1)

for c in contours:
    approx = cv2.approxPolyDP(c, 0.009 * cv2.arcLength(c, True), True)    
    cv2.drawContours(img, [approx], 0, (255, 0, 0), 1)
    n = approx.ravel()
    k = 0
    for j in n :
        if(k % 2 == 0):
            x = n[k]
            y = n[k + 1]
            cv2.circle(img, (x,y), 3, (255, 0, 0), -1)    
        k = k+1

cv2.imshow("corners", img)

вывод

1 Ответ

0 голосов
/ 18 июня 2020

За исключением случаев, когда прямоугольник идеально выровнен с осью u и v (что вы можете проверить), углы всегда являются отдельными значениями max() и min() вдоль u или v координата.

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