获取圆的 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
我有图像上圆的参数:半径和中心坐标。是否可以 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