Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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++ 如何求圆的直径_C++_Opencv_Image Processing_Geometry - Fatal编程技术网

C++ 如何求圆的直径

C++ 如何求圆的直径,c++,opencv,image-processing,geometry,C++,Opencv,Image Processing,Geometry,我有一个圆圈的图像,但我的圆圈并不完美 首先我找到了过渡坐标 然后用这个公式 最后,ı有四个半径,它们分别是最长和最短的 现在我有了这个图像: 但它们是半径,我需要找到直径如何从图像中找到直径?? 或者如何在圆中找到相互/对称/点3种方法: 我认为您需要从图像中测量它: 所以从左到右使用边缘检测蓝线宽度=蓝色像素边界框的宽度,然后计算像素数。 如果您需要,然后使用每英寸像素转换为您想要的任何单位,如英寸。 若你们的圆不是完美的,那个么你们可以在多个方向上测量,这样你们也可以找到它的偏差 还有另

我有一个圆圈的图像,但我的圆圈并不完美 首先我找到了过渡坐标 然后用这个公式 最后,ı有四个半径,它们分别是最长和最短的 现在我有了这个图像:

但它们是半径,我需要找到直径如何从图像中找到直径?? 或者如何在圆中找到相互/对称/点

3种方法:

我认为您需要从图像中测量它: 所以从左到右使用边缘检测蓝线宽度=蓝色像素边界框的宽度,然后计算像素数。 如果您需要,然后使用每英寸像素转换为您想要的任何单位,如英寸。 若你们的圆不是完美的,那个么你们可以在多个方向上测量,这样你们也可以找到它的偏差

还有另一种方法叫做蒙特卡罗法: 首先生成正方形内的随机x和y,然后计算点x、y是否在圆内,并计算内部引用的数量,然后可以使用内部计数/总计数以及直径的比率计算圆的面积

不使用随机数: fillcolor圆圈内部然后简单地计算黑色像素这是=圆圈外部的面积=>总面积平方面积-黑色像素面积=圆圈面积=>计算直径


对于这幅图,所提到的方法有些过分。只需找到非黑色像素的边界框。由于采样伪影,水平和垂直边长可能相差一个或两个像素


如果我是对的,外圆是277x273像素。如果你认为差异是显著的,那么这是一个椭圆,而不是一个圆。

也许直径=2×半径?你是对的,但是我的圆不是完美的,所以2 *R不是完全真实的。从2*r开始的直径与半径一样精确。每个点到中心的距离并不相等,同样,每个点的直径也不相同,所以我不明白使用半径有什么错。否则,你需要一个完全不同的算法,但仅取直径而不是半径并不能解决任何问题。是的,我需要从图像中测量它。谢谢,我将尝试使用蒙特卡罗来获得圆的面积,这是一个很好的例子,可以向学生介绍蒙特卡罗,但在实践中,这很少是mc的一个好应用。很容易想到更简单、收敛更快、更准确的方法。当您的数据是高维的,并且任何其他方法都太复杂时,蒙特卡罗是有意义的,但这里的情况并非如此。在这里,使用这种方法很容易,只需计算图像中的像素数超过总像素数,即可得到圆的面积。因此,您可能不会运行随机数。我在这里提到计算面积的想法,顺便说一下,这是一个有效的方法。我没有说这不是一个有效的方法。你刚才说了一个比使用mc更好的方法,通过计算像素数。如果你对mc也这么做,它根据定义使用随机数,那么收敛将需要一些时间,结果将不太准确。非黑色像素的边界框。这就是我在第1章中所说的。