Как нарисовать прямоугольники на измененном изображении? - PullRequest
0 голосов
/ 16 октября 2018

У меня есть определенные изображения, из которых я хочу идентифицировать текстовые блоки и нарисовать прямоугольник вокруг них, но эти изображения имеют различные размеры, поэтому я изменил их размеры до нового измерения, и я могу рисовать блоки вокруг текста.Но после этого я должен применить OCR к этим блокам, и когда я изменил размер изображения до более низкого размера, тексты этих блоков стали размытыми.

Пример: после изменения размера изображения размеров (5847, 4134) до (1000 700) Я смог нарисовать текстовые блоки, но после получения координат этих блоков, даже если я умножить на коэффициент изменения размера изображения, он не показывает точные блоки, как это:

Блоки После изменения размера

Рисование блоков поверх исходного изображения с координатами из измененного изображения

Чтобы нарисовать блоки на оригинале, я что-то сделалнапример:

x, y, w, h = cv2.boundingRect(c)
    x = round(x*x_old/wid)
    y = round(y*y_old/hei)
    w = round(w*x_old/wid)
    h = round(h*y_old/hei)

где x_old - исходная высота в данном случае 5874, y_old - 4134, wid - 1000, а hei - 700

.

1 Ответ

0 голосов
/ 16 октября 2018

Это больше геометрическая проблема, чем проблема Opencv.

Допустим, вы знаете все прямоугольники для изображения, имеющего размер 1000X1000, и давайте представим, что прямоугольники rec1 = ([0,0],[100,100]) и rec2 = ([50,50],[90,90])([y1,x1],[y2,x2]).

Хорошо, теперь давайте представим, что у вас есть другое изображение в форме 1255X1300, и вы хотите нарисовать такие же прямоугольники на этом новом изображении относительно старого.

Что вынужно найти соотношения x и y между двумя изображениями и применить эти отношения к изображениям.Или вы можете выразить свой прямоугольник относительным образом.

Рассчитать соотношение:

Чтобы вычислить соотношение между двумя изображениями, просто разделите его размеры x и y:

x_ratio = x_new/x_old
y_ratio = y_new/y_old

В нашем случае это будет:

x_ratio = 1.300 y_ratio = 1.255

Теперь вы применяете эти отношения к прямоугольникам и округляете ихценности.Вы просто умножаете x прямоугольника на x_ratio и y прямоугольника на y_ratio и округляете значения (имейте в виду, что при округлении он теряет немного точности)

Относительные прямоугольники:

Вы также можете представить прямоугольники относительно первого изображения, разделив его соответствующие размеры.Относительные прямоугольники должны выглядеть следующим образом: rel_rec1 = ([0.,0.],[0.1,0.1]), rel_rec2 = ([0.05,0.05],[0.09,0.09])

Затем, чтобы узнать абсолютные значения прямоугольников в новом изображении, вам просто нужно умножить относительные прямоугольники на размеры нового изображения и округлитьзначения, например

new_rec2 = ([0.05*1255,0.05*1300],[0.09*1255,0.09*1300])

Надеюсь, это помогло

...