Как вычислить центр ограничивающей рамки и как получить ориентацию QR-кода с помощью opencv (C ++), если это вообще возможно - PullRequest
0 голосов
/ 06 мая 2020
  1. Сначала часть вычислительного центра:


Итак, я использую OpenCV для обнаружения QR-кода на камере или видео, для этого Я использую класс QRCodeDetector, чтобы получить ограничивающую рамку QR-кода, для этого я использую метод detect () для поиска QR-кода, и он возвращает ограничивающую рамку с областью QR-кода. Я хочу вычислить центр этого ограничивающего прямоугольника, но я не знаю, как это сделать с данными, возвращаемыми из метода. описание метода detect () , в основном это говорит:

bool cv::QRCodeDetector::detect   (   InputArray  img,
                                      OutputArray     points 
                                  )   const

Parameters
**img**   grayscale or color (BGR) image containing (or not) QR code.
**points**    Output vector of vertices of the minimum-area quadrangle containing the code.

В примере кода это dr aws ограничивающая рамка ( здесь ) вот эта строка:

line(im, Point2i(bbox.at<float>(i,0),bbox.at<float>(i,1)), Point2i(bbox.at<float>((i+1) % n,0), bbox.at<float>((i+1) % n,1)), Scalar(255,0,0), 3);

и вот описание этого метода:

void cv::line (   InputOutputArray    img,
                  Point   pt1,
                  Point   pt2,
                  const Scalar &  color,
                  int     thickness = 1,
                  int     lineType = LINE_8,
                  int     shift = 0
              )

где pt1 - первая точка отрезка, а pt2 - вторая точка отрезка.

Итак, pt1 здесь Point2i (bbox.at (i, 0), bbox.at (i, 1))

И pt2 равно Point2i (bbox.at ((i + 1)% n, 0), bbox.at ((i + 1)% n, 1))

Я хотел узнать, что это за деталь Point2i (ну, насколько я понимаю, это тип, но bbox.at я понятия не имею, что он делает).

Поэтому я не знаю, как получить центр этого ограничивающего прямоугольника.

.

.

А теперь часть ориентации:


Используя центр ограничивающей рамки, я затем создаю 2 точки слева и справа от центра, однако, поскольку QR-код не будет в той же ориентации, всегда эти точки будут меняться, но я не знаю, как узнать ориентацию QR-кода, то, что я нашел, подсказывает мне использовать контуры Open CV как здесь но я ищу уже созданную функцию, потому что то, что я сделал бы с использованием контуров, было бы очень плохо оптимизировано. Поскольку идея состоит в том, чтобы заставить его работать в прямом эфире с камеры, я хочу, чтобы он обрабатывался достаточно быстро, когда происходят другие вещи. Итак, есть идеи по этому поводу?

РЕДАКТИРОВАТЬ: Для ориентации я просто подумал об идее: если я могу получить положение центра, я могу использовать эти координаты плюс координаты из правого верхнего угла (для пример), чтобы разместить две другие точки, которые я хочу, справа и слева от кода qr. Когда я узнаю, как получить центр, я выясню, как именно это сделать.

Спасибо за любой ввод,

...