获取圆的 PIXEL VALUES?

Get PIXEL VALUES of a circle located?

我有图像上圆的参数:半径和中心坐标。是否可以 return 沿圆的像素位置?我需要获取沿圆线的所有像素值。 我尝试通过下一个解决方案获取坐标:

...
cx = int(img.shape[1]/2)
cy = int(img.shape[0]/2)
radius = 700
angle = np.linspace(0,  2 * np.pi, 360)
X = (np.round(cx + radius * np.cos(angle))).astype(int)
Y = (np.round(cy + radius * np.sin(angle))).astype(int)
...

但是如果角度与半径不一致,我会错过相邻的像素:

你永远不可能得到圆上的所有点,因为点是连续的。你能做的就是在圆上多加点,这样画出来的图看起来是连续的。

将此处生成的样本数从 360 更改为更大的值,例如 720。

angle = np.linspace(0,  2 * np.pi, 720)

您可以不断增加,直到您对结果满意为止。

但是,由于您使用 openCV 绘图并且所有点都必须是整数,因此您很可能仍然存在差距。这就是为什么最好的解决方案是使用openCV的绘图功能

cv.circle(img,(x_cen,y_cen), radius, colour, thickness)

X² + Y² ≤ R² 域的轮廓可以得到一个连续的圆。如果观察对称性,您会注意到圆可以分解为 8 个弧。考虑从 (R, 0) 到与 Y=X 的交点(图中的八分圆 2)的弧:它由从 (X, Y) 到 (X, Y+1) 或 (X-1, Y) 的位移构成+1) 只有。如果我们把它代入磁盘方程,我们需要 X² + (Y + 1)² ≤ R² 或 (X - 1)² + (Y + 1)² ≤ R²,如果可以的话,我们优先考虑第一个不等式满意(第二个自动满足)。

X, Y:= R, 0
while X > Y:
    # 8 symmetries
    Plot(X, Y);  Plot(Y, X);  Plot(-X, Y);  Plot(-Y, X); 
    Plot(X, -Y); Plot(Y, -X); Plot(-X, -Y); Plot(-Y, -X); 

    if X² + (Y + 1)² > R²:
      X-= 1
    Y+= 1