【问题标题】:iOS get CGPoint from openCV cv::PointiOS 从 openCV cv::Point 获取 CGPoint
【发布时间】:2015-08-14 18:45:05
【问题描述】:

在上图中,我们可以看到一些openCV algorithm在图像上绘制的点。

我想在这些点上绘制一个UIView 点,以便用户对其进行裁剪。

我不知道如何访问这些积分,以便我可以添加 uiview 积分。

我尝试阅读cv::Point,但值与坐标高度和宽度不同(更多)。

static cv::Mat drawSquares( cv::Mat& image, const std::vector<std::vector<cv::Point> >& squares )
{

    int max_X=0,max_Y=0;
    int min_X=999,min_Y=999;
    for( size_t i = 0; i < squares.size(); i++ )
    {
        const cv::Point* p = &squares[i][0];
        int n = (int)squares[i].size();

        NSLog(@"Squares%d %d %d",n,p->x,p->y);

        polylines(image, &p, &n, 1, true, cv::Scalar(0,255,0), 3, cv::LINE_AA);

    }


    return image;
}

在上面的代码中,drawsquare 方法绘制正方形。我有NSLog 点 x、y 坐标,但这些值与设备坐标系无关。

有人可以帮助我如何实现它或替代我的要求。

谢谢

【问题讨论】:

  • 所以这里的问题是您无法在图像视图的顶部绘制 CropView(多边形)?对吗?
  • 不,我只想将 cv::Point 转换为 CGPoint,这样我就可以在这些点上添加 uiview 点并添加裁剪功能。cv::Point 不是设备坐标。有什么公式转换它。
  • @muku 我也有类似的问题,你能找到这个 cvpoint 到 cgpoint 的解决方案吗..
  • 仅供参考:Apple 类 CIDetector 提供了类似的矩形检测功能。

标签: c++ ios objective-c opencv cgpoint


【解决方案1】:

实际上由于图像大小,坐标以不同的方式映射,

例如。如果图像大小在屏幕边界内则没有问题,可以直接将cvPoint用作CGPoint,

但如果情况是图像大小是 3000*2464,大约是相机点击图像的大小,那么你已经应用了一些公式。

以下是我从互联网上获得的方法,当图像的大小更符合我们的屏幕尺寸时,它帮助我从 cvPoint 中提取 CGPoint

获取图片的比例因子

- (CGFloat) contentScale
{
CGSize imageSize = self.image.size;
CGFloat imageScale = fminf(CGRectGetWidth(self.bounds)/imageSize.width, CGRectGetHeight(self.bounds)/imageSize.height);
return imageScale;
 }

假设这是您拥有的 cvPoint(_pointA 变量),那么您可以使用以下公式将其提取出来。

tmp = CGPointMake((_pointA.frame.origin.x) / scaleFactor, (_pointA.frame.origin.y) / scaleFactor);

【讨论】:

    【解决方案2】:

    这是在 Swift 3 中。在您将 cv::Points 返回到的 Swift 类中:

    1. 从您的相机 AV Capture Session 中获取您正在录制的图像的 xy 尺寸
    2. 将用于可视化图像的UIviewxy 尺寸除以X 和Y 中捕获会话的图像尺寸
    3. 将点的xy 坐标乘以缩放的xy 尺寸

    {
        let imageScaleX = imgView.bounds.width/(newCameraHelper?.dimensionX)!
        let imageScaleY = imgView.bounds.height/(newCameraHelper?.dimensionY)!
        for point in Squares {
           let x = point.x * imageScaleX
           let y = point.y * imageScaleY
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      相关资源
      最近更新 更多