【问题标题】:OpenCV rotate, distort and translate ROI in new imageOpenCV 在新图像中旋转、扭曲和转换 ROI
【发布时间】:2013-05-01 04:06:33
【问题描述】:

我有一张图像,我想从中获得垂直 ROI,应用一些变换并添加到另一张图像。

我在 StackOverflow 和其他论坛上阅读了很多问题和答案,但我仍然被这个问题所困扰。目前我正在使用 OpenCV 的 C 接口,但如果需要,我可以使用 C++ 接口(我必须编写一个转换函数,因为我在 Cocoa 中使用 CGImageRef)。

要从顶部图像(见下文)到底部图像,我想我必须:

  • 获取第一张图片的ROI;
  • 按比例缩小;
  • 为我的“宽度”角度(角度固定)获取中心和两个圆之间的线上的交点;
  • 扭曲图像,使角贴在我的交点上;
  • 围绕中心点旋转并将其放入输出图像中。

目前,我做得很好:

  • 获得投资回报率;
  • 使用 cvResize 对其进行缩放;
  • 获取交点不应该太复杂,因为它是纯几何,我实现它还有一个目的。

但是,我完全不知道如何扭曲我的 ROI 的结果图像,而且我不知道在 OpenCV 中是否有可能。我必须使用一种透视校正吗?

而且,我一直在尝试我在这里找到的几个好的帖子解决方案,以使用旋转的边界框进行旋转,但目前没有好的结果。

编辑:

好吧,我设法完成了第一部分的工作:

  • 在基础图像中获取 ROI;
  • 旋转并将其放置在距中心固定距离处。

我使用了这篇文章中解释和编码的方法:https://stackoverflow.com/a/16285286/1060921

我只添加了一个变量来设置旋转点并获得我的内圈。

NB :我在调用方法之前设置了ROI,所以post方法中的ROI是......图像大小。然后我用 cvAdd 将它放在最终图像的中心。

在这里,我得到了相机输入的一个像素切片。 我现在要做的是扭曲更大的切片,例如从内圈的 2 个像素到外圈的 5 个像素。

【问题讨论】:

    标签: c++ c cocoa opencv rotation


    【解决方案1】:

    请参阅此tutorial,它使用warpPerspective 来纠正透视失真。

    编辑:在您的情况下,warpAffine 应该是更好、更简单的解决方案。

    所以,你可以这样做,只需使用四个点而不是三个点:

    Point2f srcTri[3];
    Point2f dstTri[3];
    
    Mat rot_mat( 2, 3, CV_32FC1 );
    Mat warp_mat( 2, 3, CV_32FC1 );
    Mat src, warp_dst, warp_rotate_dst;
    
    /// Load the image
    src = imread( ... );
    
    /// Set the dst image the same type and size as src
    warp_dst = Mat::zeros( src.rows, src.cols, src.type() );
    
    /// Set your 3 points to calculate the  Affine Transform
    srcTri[0] = Point2f( 0,0 );
    srcTri[1] = Point2f( src.cols - 1, 0 );
    srcTri[2] = Point2f( 0, src.rows - 1 );
    
    dstTri[0] = Point2f( src.cols*0.0, src.rows*0.33 );
    dstTri[1] = Point2f( src.cols*0.85, src.rows*0.25 );
    dstTri[2] = Point2f( src.cols*0.15, src.rows*0.7 );
    
    /// Get the Affine Transform
    warp_mat = getAffineTransform( srcTri, dstTri );
    
    /// Apply the Affine Transform just found to the src image
    warpAffine( src, warp_dst, warp_mat, warp_dst.size() );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      相关资源
      最近更新 更多