OpenCV2 преобразовать изображение, используя карту преобразования - PullRequest
1 голос
/ 07 февраля 2012

Учитывая две матрицы cv :: Mat, которые отображают каждый пиксель исходного изображения на пиксель целевого изображения (с R2 по R2), я хотел бы преобразовать исходное изображение в конечное изображение. Я успешно сделал это, используя цикл for, но он слишком медленный:

cv::Mat srcImg(100,100,CV_8U);

//fill...

cv::Mat dstImg(100,100,CV_8U);

//dst2src ->backprojection

//these matrices indicates for each pixel in the destination image, where to map it from the source image

cv::Mat x_dst2src(100,100,CV_64F);

cv::Mat y_dst2src(100,100,CV_64F);

//fill...

for(int ydst=0; ydst!=100;++ydst)

{

    for(int xdst=0; xdst!=100;++xdst)
     {
      double xsrc = x_dst2src.at<double>(ydst,xdst);
      double ysrc = y_dst2src.at<double>(ydst,xdst);
      double val = getBicubic(srcImg,xsrc,ysrc);
      dstImg.at<double>(ydst,xdst) = val;

     }

}

этот базовый код работает, но ОЧЕНЬ медленно (мои изображения больше, чем 100x100, и я должен использовать бикубический). Спасибо,

-O-

1 Ответ

2 голосов
/ 08 февраля 2012

Есть хорошая функция OpenCV, которая называется remap ().И это удивительно, но именно это преобразование.

Чтобы ускорить его, вам нужно искать другую функцию, которая подготавливает карты в формате, который немного более дружествен к процессору, чем простая карта положения.(Это что-то вроде mapTransform (), ищите его в see also части документации remap ())

Счастливого переотображения!

...