Как преобразовать координаты в изображении, обрезанном с помощью cv2.minarearect (), обратно в исходное изображение - PullRequest
0 голосов
/ 09 апреля 2019

При копировании изображения с использованием cv2.minAreaRect() центр, размер и угол возвращаются найденного объекта.Их можно использовать для обрезки объекта.Как можно преобразовать координаты объекта в обрезанном изображении обратно в начало координат, например, чтобы указать положение объекта, обнаруженного в обрезанном изображении, в исходном общем изображении?

можно вычислить матрицу вращенияс помощью

rotation_matrix = cv2.getRotationMatrix2D(center, angle, 1) 

и с помощью следующего кода координаты можно поворачивать:

original_point = np.matrix([[x],[y],[0]])
xrotated,yrotated = rotation_matrix*original_point

Однако я не могу найти, как правильно перевести координаты


img, cnt, hierarchy = cv2.findContours(img ,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

for contour, hier in zip (cnt, hierarchy[0]):

        if hier[3] == -1: #outside contour

            x,y,w,h = cv2.boundingRect(contour)   
            lenght = max(w,h)
            width = min(w,h)   
            if width> 100 and  lenght > 200:
                RotatedProductBox = cv2.minAreaRect(contour)
                (center, size, angle) = RotatedProductBox


rotation_matrix = cv2.getRotationMatrix2D(center, angle, 1)
print "rotationMatrix= "+str(rotation_matrix)

x=354
y=457
original_point = np.matrix([[x],[y],[0]])
print"original point"+str(original_point)
xrotated,yrotated = rotation_matrix*original_point
print "x and y rotated:"+str(xrotated)+", "+str(yrotated)

Я бы ожидал следующий шаг, как:

x_in_original_image = xrotated+ ...?...
y_in_original_image = yrotated+ ...?...
...