图像重投影坐标计算问题

CPCV_defy 2016-12-08 03:50:24
描述:
opencv 函数remap(src,dst,map),可以将src根据map投影为图像dst,请教其中原理:
假设
【(1.1,3.2)(2,3)(2.1,3.2)
... ... ...

map为与src等大小的浮点矩阵,每个坐标记录src对应到dst的坐标,由于对应到dst中的坐标非整数,所以需要进行反向投影,从而进行图像插值工作。
问题:
如何根据src,map,来计算dst每个坐标点对应到src中的坐标值(浮点数)?
话说根本就没有何时的板块选择啊!
csdn再见,写个博客也没用访问量。。。
...全文
761 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-12-09
  • 打赏
  • 举报
回复
Computer_Vision_Algorithms_and_Applications_SzeliskiBook_20100903_draft.pdf
CPCV_defy 2016-12-08
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
只能请楼主先编译链接调试 C:\OpenCV31\opencv\sources\samples\cpp\tutorial_code\ImgTrans\Remap_Demo.cpp 了。 如果楼主还觉得“一时半会看不完”,那我劝楼主还是趁早改行吧。 想知道remap的大概原理,参考remap的源代码: C:\OpenCV31\opencv\sources\modules\cudawarping\src\remap.cpp
你以为我只是想知道重投影的原理吗?麻烦你看清楚在说话,我自己也可以写插值函数。还有你要是觉得扒源代码很容易请你先试试扒几个,我想知道你能多久扒一个函数。你去看看sitich函数,你去看懂原理,顺便扒以下。完事了请告诉我。赵老师!
CPCV_defy 2016-12-08
  • 打赏
  • 举报
回复
。。。。你根本就没理解我在说什么,我也是醉了。
赵4老师 2016-12-08
  • 打赏
  • 举报
回复
C:\OpenCV31\opencv\sources\samples\cpp\tutorial_code\ImgTrans\Remap_Demo.cpp
/**
 * @function Remap_Demo.cpp
 * @brief Demo code for Remap
 * @author Ana Huaman
 */

#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace cv;

/// Global variables
Mat src, dst;
Mat map_x, map_y;
const char* remap_window = "Remap demo";
int ind = 0;

/// Function Headers
void update_map( void );

/**
 * @function main
 */
int main( int, char** argv )
{
  /// Load the image
  src = imread( argv[1], 1 );

  /// Create dst, map_x and map_y with the same size as src:
  dst.create( src.size(), src.type() );
  map_x.create( src.size(), CV_32FC1 );
  map_y.create( src.size(), CV_32FC1 );

  /// Create window
  namedWindow( remap_window, WINDOW_AUTOSIZE );

  /// Loop
  for(;;)
  {
    /// Each 1 sec. Press ESC to exit the program
    int c = waitKey( 1000 );

    if( (char)c == 27 )
      { break; }

    /// Update map_x & map_y. Then apply remap
    update_map();
    remap( src, dst, map_x, map_y, INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 0) );

    // Display results
    imshow( remap_window, dst );
  }
  return 0;
}

/**
 * @function update_map
 * @brief Fill the map_x and map_y matrices with 4 types of mappings
 */
void update_map( void )
{
  ind = ind%4;

  for( int j = 0; j < src.rows; j++ )
    { for( int i = 0; i < src.cols; i++ )
     {
           switch( ind )
         {
         case 0:
           if( i > src.cols*0.25 && i < src.cols*0.75 && j > src.rows*0.25 && j < src.rows*0.75 )
                 {
               map_x.at<float>(j,i) = 2*( i - src.cols*0.25f ) + 0.5f ;
               map_y.at<float>(j,i) = 2*( j - src.rows*0.25f ) + 0.5f ;
              }
           else
         { map_x.at<float>(j,i) = 0 ;
               map_y.at<float>(j,i) = 0 ;
                 }
                   break;
         case 1:
               map_x.at<float>(j,i) = (float)i ;
               map_y.at<float>(j,i) = (float)(src.rows - j) ;
           break;
             case 2:
               map_x.at<float>(j,i) = (float)(src.cols - i) ;
               map_y.at<float>(j,i) = (float)j ;
           break;
             case 3:
               map_x.at<float>(j,i) = (float)(src.cols - i) ;
               map_y.at<float>(j,i) = (float)(src.rows - j) ;
           break;
             } // end of switch
     }
    }
  ind++;
}
赵4老师 2016-12-08
  • 打赏
  • 举报
回复
只能请楼主先编译链接调试 C:\OpenCV31\opencv\sources\samples\cpp\tutorial_code\ImgTrans\Remap_Demo.cpp 了。 如果楼主还觉得“一时半会看不完”,那我劝楼主还是趁早改行吧。 想知道remap的大概原理,参考remap的源代码: C:\OpenCV31\opencv\sources\modules\cudawarping\src\remap.cpp
CPCV_defy 2016-12-08
  • 打赏
  • 举报
回复
我是用了之后才有疑问的...源代码涉及的结构太多,一时半会看不完,所以想问问有没有知道大概原理的
赵4老师 2016-12-08
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
建议楼主先编译链接调试OpenCV自带的相关例子代码。
C:\OpenCV31\opencv\sources\samples\cpp\3calibration.cpp C:\OpenCV31\opencv\sources\samples\cpp\calibration.cpp C:\OpenCV31\opencv\sources\samples\cpp\select3dobj.cpp C:\OpenCV31\opencv\sources\samples\cpp\stereo_calib.cpp C:\OpenCV31\opencv\sources\samples\cpp\stereo_match.cpp C:\OpenCV31\opencv\sources\samples\cpp\tutorial_code\calib3d\camera_calibration\camera_calibration.cpp C:\OpenCV31\opencv\sources\samples\cpp\tutorial_code\ImgTrans\Remap_Demo.cpp C:\OpenCV31\opencv\sources\samples\gpu\performance\tests.cpp
赵4老师 2016-12-08
  • 打赏
  • 举报
回复
建议楼主先编译链接调试OpenCV自带的相关例子代码。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧