2015-10-20 2 views
-2

Я работаю над кодом для обработки изображений, я работаю над анализом геометрических фигур, в частности, работа с прямоугольниками, и у меня есть функция для обнаружения прямоугольников, моя проблема заключается в следующем:Автоматическое вращение прямоугольников с OpenCV и python

можно обнаружить все прямоугольники, но мне нужно исправить наклон обнаруженных прямоугольников, то есть, есть inclunados прямоугольники по диагонали, мне нужно исправить наклон и переместить прямоугольник в прямоугольнике прямой (90 °)

На следующем веб-сайте: http://www.salvasavall.com/2012/04/rotacion-automatica-de-rectangulos-con.html и автор «Salva Savall», я нашел aC++-код, который исправляет проблему, но я не понимаю код и не переводил на Python.

Как Python добивается коррекции искаженных прямоугольников и передает все прямоугольники в прямоугольные (90 °)?

+1

Вы пытались использовать 'center, dimensions, theta = cv2.minAreaRect (cnt)'? –

+0

Я использую cv2.minAreaRect (контур), я думал, что центр вернулся, размер и угол в этом порядке, но всегда третье значение - это значение от 0 до -90. Используя библиотеку «Scipy», я могу поворачивать изображение с помощью одной строки кода, но единственное, что мне нужно, это исправить угол наклона и получить прямой прямоугольник. Этот код находится в переводе: dst = ndimage.rotate (temp, angle) –

ответ

0

Я хотел бы предложить грубую силу подход, как я не знаю, элегантные один: взять три очка на прямоугольник по часовой стрелке с P1 является более высокой точкой

P1=(X1,Y1),P2=(X2,Y2),P3=(X3,Y3) 
#length of the sides will be 
L1=np.sqrt((X1-X2)^2+(Y1-Y2)^2) 
L2=np.sqrt((X2-X3)^2+(Y2-Y3)^2) 

теперь все зависит от того, вокруг какой точки вы хотите, чтобы повернуть его и в каком направлении, если вы хотите сделать его по часовой стрелке P1 на новый прямоугольник будет

Q1=(X1,Y1) 
Q2=(X1+L1,Y1) 
Q3=(X1+L1,Y1+L2) 

по часовой стрелке еще раз я надеюсь, что это помогает

Смежные вопросы