iOS从openCV cv :: Point获取CGPoint

Muk*_*esh 7 c++ opencv objective-c cgpoint ios

在此输入图像描述

在上面的图像中,我们可以看到一些在图像上绘制的点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;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,drawsquare方法绘制正方形.我NSLog有点x,y坐标,但这些值与设备坐标系不相符.

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

谢谢

Muk*_*esh 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;
 }
Run Code Online (Sandbox Code Playgroud)

假设这是 cvPoint(_pointA 变量),然后通过使用以下公式,您可以提取它。

tmp = CGPointMake((_pointA.frame.origin.x) / scaleFactor, (_pointA.frame.origin.y) / scaleFactor);
Run Code Online (Sandbox Code Playgroud)