iOS从openCV cv :: Point获取CGPoint

时间:2015-06-01 10:34:06

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

enter image description here

在上图中,我们可以通过一些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坐标,但这些值不是w.r.t到设备坐标系。

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

由于

2 个答案:

答案 0 :(得分:0)

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

例如。如果图像大小在屏幕边界内则没有问题,可以直接使用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);

答案 1 :(得分:0)

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

  1. 相机AV Capture Session
  2. 获取您正在录制的图像的xy尺寸
  3. 除以您正在使用的 x yUIview维度,通过X和Y中捕获会话的图像尺寸来显示图像
  4. 将点的xy坐标乘以缩放的xy尺寸
  5. {
        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
        }
    }
    
相关问题