Интерполировать прямоугольник пикселей, которые находятся вне изображения в OpenCV - PullRequest
0 голосов
/ 23 января 2019

Я недавно читаю код cv::getRectSubPix в OpenCV, который включает нанесение прямоугольников из изображения.Конкретно, я застрял на функции adjustRect, которая используется для изменения прямоугольного окна за пределами границ.
В соответствии с кодом adjustRect, верхний левый угол p=(x,y) прямоугольникаизменится на p'=(-x,-y) (синяя рамка), если p (красная рамка) выглядит следующим образом: enter image description here Что меня озадачило, так это последняя строка в adjustRect:

return src - rect.x*pix_size;

почему src смещен только в направлении x?Насколько я понимаю, правильный код должен быть:

return src - rect.x*pix_size-rect.y*src_step

Кроме того, я думаю, src будет указывать на неопределенную память, если оба значения x и y отрицательны.Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 24 января 2019

Как правило, adjustRect следует рассматривать вместе с кодами в getRectSubPix_Cn_. OpenCV принимает различные стратегии интерполяции, когда прямоугольник пикселя находится вне изображения.
Он будет правильно разыменовываться при индексации пикселей, потому что:

s0 = src[r.x*cn + c]*b1 + src2[r.x*cn + c]*b2; .

Для моего случая эта схема интерполяции изображена на следующем рисунке: enter image description here Этот пост ожидает обновления, потому что я думаю, что должно быть больше деталей, которые будут обнаружены.

...