【问题标题】:OpenCV Help on cvPerspectiveTransform关于 cv PerspectiveTransform 的 OpenCV 帮助
【发布时间】:2011-09-14 14:57:49
【问题描述】:

我对以下代码有疑问,我正在尝试使用 cvPerspectiveTransform 更改图像的视角,但出现以下错误:

OpenCV Error: Assertion failed (scn + 1 == m.cols && (depth == CV_32F || depth == CV_64F)) 


  CvMat* p = cvCreateMat(2, 4, CV_64FC1);
  CvMat* h = cvCreateMat(2, 4, CV_64FC1);
  CvMat* p2h = cvCreateMat(2, 4, CV_64FC1);

  cvZero(p);
  cvZero(h);
  cvZero(p2h);
  //set src points
  for (int i = 0; i < 4; i++) {
    CvPoint point = verifiedPoints[i];
    cvmSet( p, 0, i, point.x );
    cvmSet( p, 1, i, point.y );
    printf("point %d (%d , %d)\n",i,point.x,point.y);
  }
  //set dst points
  cvmSet( h, 0, 0, 0 );
  cvmSet( h, 1, 0, real_height );

  cvmSet( h, 0, 1, real_width );
  cvmSet( h, 1, 1, real_height );

  cvmSet( h, 0, 2, real_width );
  cvmSet( h, 1, 2, 0 );

  cvmSet( h, 0, 3, 0 );
  cvmSet( h, 1, 3, 0);

  //cvPerspectiveTransform or cvFindHomography?
  cvPerspectiveTransform(p,h,p2h);

  cvReleaseMat(&p);
  cvReleaseMat(&h);

我尝试将 p2h 更改为其他值,例如:

 CvMat* p2h = cvCreateMat(3, 3, CV_32F)

但我得到其他错误:

OpenCV Error: Assertion failed (dst.type() == src.type() && dst.channels() == m.rows-1) in cvPerspectiveTransform

有什么帮助吗?

【问题讨论】:

    标签: image-processing opencv


    【解决方案1】:

    根据 OpenCV documentation for cvPerspectiveTransform:

    src – 源两通道或三通道浮点数组。每个 element 是要转换的 2D/3D 向量。
    dst - 目标数组 与 src 的大小和类型相同。
    mtx – 3x3 或 4x4 浮点 变换矩阵。

    所以你需要这样声明你的矩阵:

    CvMat* p = cvCreateMat(1, 4, CV_64FC2);
    CvMat* h = cvCreateMat(1, 4, CV_64FC2);
    CvMat* p2h = cvCreateMat(3, 3, CV_64FC1); 
    

    【讨论】:

      猜你喜欢
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多