gpt4 book ai didi

ios - OpenCV 以像素为单位获取坐标/半径

转载 作者:太空宇宙 更新时间:2023-11-03 22:25:11 27 4
gpt4 key购买 nike

我有对图像应用一些变换以检测圆圈的代码

(GaussianBlur->cvtColor(gray)->canny->HoughCircles)

结果我得到了vector<Vec3f> circles;数组。

如果我用 OpenCV 绘制结果:

cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
int radius = cvRound(circles[i][2]);
//circle center
circle( originalMat, center, 3, Scalar(0,255,0), -1, 8, 0 );
// circle outline
circle( originalMat, center, radius, Scalar(0,0,255), 1, 8, 0 );

看起来不错(见附图,蓝色圆圈)

但如果我不是通过 OpenCV 尝试绘制图像,我有另一个圆圈(有时是椭圆形)(附加图像上的红色圆圈):

 UIGraphicsBeginImageContext(image.size); //the same size as original
[image drawAtPoint:CGPointZero];
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor redColor] setStroke];
CGRect circleRect = CGRectMake(circles[i][0] - circles[i][2] ,
circles[i][1] - circles[i][2],
circles[i][0] + circles[i][2],
circles[i][1] + circles[i][2]
);
circleRect = CGRectInset(circleRect, 5, 5);
CGContextStrokeEllipseInRect(ctx, circleRect);
UIImage *retImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

为什么会这样?如何获取以像素为单位的坐标和半径大小以正确绘制它?

enter image description here

附:UIImageMat对话我得到表格documentation

最佳答案

CGRectMake needs (x, y, width, height)而不是左上右下 点的坐标。所以你需要改为:

 CGRect circleRect = CGRectMake(circles[i][0] - circles[i][2] ,
circles[i][1] - circles[i][2],
2 * circles[i][2],
2 * circles[i][2]
);

关于ios - OpenCV 以像素为单位获取坐标/半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42507723/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com