При копировании изображения с использованием 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+ ...?...