2012-02-07 4 views
1

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

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-

ответ

2

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

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

Счастливое переназначение!

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