1

Есть ли способ, которым я могу выпрямить это изображение, используя OpenCV с Python? Я понял это, используя различные преобразования, но я не могу получить его.OpenCV Выровнять изображение с помощью Python

Image

Вот мой код:

rows, cols, h = img.shape 

M = np.float32([[1, 0, 100], [0, 1, 50]]) 

А потом применить преобразование аффинным.

dst = cv2.warpAffine(roi, M, (cols, rows)) 

Все еще я не могу получить желаемый результат изображения, который нужно выпрямить. Поцарапать голову почти на час. Кто-нибудь может мне помочь?

+0

Это возможно только в том случае, если вы знаете угол поворота или знаете ограничительную точку прямоугольника. – ZdaR

+0

Что вы подразумеваете под ограничивающей точкой? – whaangbuu

+0

Розовая коробка, которая ограничивает границы ваших книг – ZdaR

ответ

2

Вы помните мой предыдущий пост? Этот ответ основан на этом.

Итак, я получил 4 угловые точки ограничительной рамки вокруг книги и подал ее в функцию гомографии.

Код:

#---- 4 corner points of the bounding box 
pts_src = np.array([[17.0,0.0], [77.0,5.0], [0.0, 552.0],[53.0, 552.0]]) 

#---- 4 corner points of the black image you want to impose it on 
pts_dst = np.array([[0.0,0.0],[77.0, 0.0],[ 0.0,552.0],[77.0, 552.0]]) 

#---- forming the black image of specific size 
im_dst = np.zeros((552, 77, 3), np.uint8) 

#---- Framing the homography matrix 
h, status = cv2.findHomography(pts_src, pts_dst) 

#---- transforming the image bound in the rectangle to straighten 
im_out = cv2.warpPerspective(im, h, (im_dst.shape[1],im_dst.shape[0])) 
cv2.imwrite("im_out.jpg", im_out) 

enter image description here

Поскольку у вас есть контур, ограничивающий прямоугольник вокруг книги; вы должны подать эти 4 точки в массив pts_src.

+0

ahhh okay ... Никогда не думал, что я могу применить его в этом сценарии. Спасибо приятель. Только один вопрос, как вы получили эту ценность? 'pts_src = np.array ([[17.0.0.0], [77.0.5.0], [0.0, 552.0], [53.0, 552.0]])' 'pts_dst = np.array ([[0.0,0.0] , [77.0, 0.0], [0.0.552.0], [77.0, 552.0]]) ' ' im_dst = np.zeros ((552, 77, 3), np.uint8) ' – whaangbuu

+0

Я вручную нарисовал круги на углы ограничивающей коробки. Все, что вам нужно сделать, это получить эти точки из контура, который у вас есть –

+0

Как получить точки из моего контура? Потому что, когда я печатаю его, он возвращает коллекцию. И я не знаю, с чего начать. Надеюсь, вы можете дать мне предложение. Очень признателен. – whaangbuu