c-我该如何使用opencv绘制相机图像来创建现场游乐场镜子



使用Opencv和Linux,我想使用实时网络摄像头创建一个有趣的房子镜像效果,短而蹲,高而瘦的效果。我女儿喜欢这些东西,我想用相机制作一个。我不太确定这些效果所需的转换。如有任何帮助,我们将不胜感激。我有很多框架在运行,现场视频播放等等,只是没有转换。

乙醇

我认为您需要使用"径向"变换和"销垫",后者是反向径向的。为了制动变换的对称性,您可以在之前和之后拉伸图像:

  1. 假设您的图像为300x300像素
  2. 将其拉伸至300x600或600x300使用cvResize()
  3. 应用变换:径向、枕形或正弦曲线的
  4. 拉伸至300x300

我从来没有在openCV中使用过径向或正弦变换,所以我没有一段代码可以附加。但是您可以使用cvUnstor2(),看看它是否正常。使用范围为0..100的轨迹条创建窗口。每个轨迹条控制失真的参数:

static IplImage* srcImage;
static IplImage* dstImage;
static double _camera[9];
static double _dist4Coeff[4];        // This is the transformation matrix
static int _r = 50;   // Radial transform. 50 in range 0..100
static int _tX = 50;  // Tangetial coef in X directio
static int _tY = 50;  // Tangetial coef in Y directio
static int allRange = 50;
// Open windows
cvNamedWindow(winName, 1);
// Add track bars.
cvShowImage(winName, srcImage );
cvCreateTrackbar("Radial", winName, &_r         , 2*allRange, callBackFun);
cvCreateTrackbar("Tang X", winName, &_tX        , 2*allRange, callBackFun);
cvCreateTrackbar("Tang Y", winName, &_tY        , 2*allRange, callBackFun);
callBackFun(0);
// The distortion call back
void callBackFun(int arg){
 CvMat intrCamParamsMat = cvMat( 3, 3, CV_64F, _camera );
 CvMat dist4Coeff       = cvMat( 1, 4, CV_64F, _dist4Coeff );
 // Build distortion coefficients matrix.
 dist4Coeff.data.db[0] = (_r-allRange*1.0)/allRange*1.0;
 dist4Coeff.data.db[1] = (_r-allRange*1.0)/allRange*1.0;
 dist4Coeff.data.db[2] = (_tY-allRange*1.0)/allRange*1.0;
 dist4Coeff.data.db[3] = (_tX-allRange*1.0)/allRange*1.0;
 // Build intrinsic camera parameters matrix.
 intrCamParamsMat.data.db[0] = 587.1769751432448200/2.0;
 intrCamParamsMat.data.db[1] = 0.;
 intrCamParamsMat.data.db[2] = 319.5000000000000000/2.0+0;
 intrCamParamsMat.data.db[3] = 0.;
 intrCamParamsMat.data.db[4] = 591.3189722549362800/2.0;
 intrCamParamsMat.data.db[5] = 239.5000000000000000/2.0+0;
 intrCamParamsMat.data.db[6] = 0.;
 intrCamParamsMat.data.db[7] = 0.;
 intrCamParamsMat.data.db[8] = 1.;
 // Apply transformation
 cvUndistort2( srcImage, dstImage, &intrCamParamsMat, &dist4Coeff );
 cvShowImage( winName, dstImage );
}

相关内容

  • 没有找到相关文章

最新更新