Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ iOS从openCV::Point获取CGPoint_C++_Ios_Objective C_Opencv_Cgpoint - Fatal编程技术网

C++ iOS从openCV::Point获取CGPoint

C++ iOS从openCV::Point获取CGPoint,c++,ios,objective-c,opencv,cgpoint,C++,Ios,Objective C,Opencv,Cgpoint,在上面的图像中,我们可以通过一些openCV算法看到在图像上绘制的点 我想在这些点上画一个ui视图点,以便用户可以裁剪它 我不知道如何访问这些点,以便添加uiview点 我试图读取cv::Point,但值与坐标高度和宽度不同(更多) static cv::Mat drawSquares( cv::Mat& image, const std::vector<std::vector<cv::Point> >& squares ) { int max_

在上面的图像中,我们可以通过一些
openCV算法
看到在图像上绘制的点

我想在这些点上画一个
ui视图
点,以便用户可以裁剪它

我不知道如何访问这些点,以便添加
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;
}
静态cv::Mat drawSquares(cv::Mat&image,const std::vector&squares)
{
int max_X=0,max_Y=0;
int min_X=999,min_Y=999;
对于(size_t i=0;ix,p->y);
多段线(图像,&p,&n,1,真,cv::Scalar(0255,0),3,cv::LINE_AA);
}
返回图像;
}
在上面的代码中,
drawsquare
方法绘制正方形。我有
NSLog
点x,y坐标,但这些值不是设备坐标系的w.r.t

有人可以帮助我如何实现这一目标,或者作为我需求的替代方案


谢谢

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

例如,如果图像大小在屏幕边界内,则没有问题,您可以直接使用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(\u pointA变量),然后使用下面的公式,你可以提取它。

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

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

  • 从相机AV捕获会话中获取您正在录制的图像的
    x
    y
    尺寸
  • 将用于可视化图像的
    ui视图的
    x
    y
    维度除以x和y中捕获会话的图像维度
  • 将点的
    x
    y
    坐标乘以缩放的
    x
    y
    尺寸


  • 所以这里的问题是你不能在imageview上面绘制CropView(多边形)?对吗?不,我只想将cv::Point转换为CGPoint,这样我就可以在这些点上添加uiview点并添加裁剪特征。cv::Point不是设备坐标。是否有任何公式可以转换它。@muku我有类似的问题,您是否能够找到此cvpoint到cgpoint的解决方案..仅供参考:Apple class CIDetector提供类似的矩形检测功能。
    {
        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
        }
    }