使用Python绘制图像中心圆形却显示为直线的技术求助
问题:绘制中心白色圆形却出现白色直线的修复方案
错误原因分析
- 坐标参数传反:核心问题是调用
Dis函数时参数顺序错误,导致计算的不是当前点到图像中心的距离,而是错误的坐标点距离,最终画出直线而非圆形。 - 语法错误:最后一行
Show(Canvas))多了一个右括号,会触发语法报错。 - 路径转义隐患:图像路径使用单反斜杠可能引发转义问题,比如
\T、\L会被识别为特殊字符。
修正后的代码
from PIL import Image import numpy as np # 使用原始字符串避免路径转义问题 img = Image.open(r"C:\TMP\Lily1.jpg") img = img.convert("L") Img = np.array(img) def Show(arr): img = Image.fromarray(arr, "L") img.show() def Dis(x1, y1, x2, y2): return ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 # sx是图像宽度(x轴)中心,sy是图像高度(y轴)中心 sx = len(Img[0]) / 2 sy = len(Img) / 2 Canvas = np.array(Img, copy=True) # a遍历y轴(行),b遍历x轴(列) for a in range(int(sy * 2)): for b in range(int(sx * 2)): # 修正参数顺序:计算当前点(b,a)到中心(sx,sy)的距离 if Dis(b, a, sx, sy) < 200: Canvas[a, b] = 255 # 修正多余括号 Show(Canvas)
关键修正说明
- 坐标参数修正:将
Dis(sx, b, sy, a)改为Dis(b, a, sx, sy),当前点坐标为(x=b, y=a),图像中心坐标为(x=sx, y=sy),这样才能正确计算两点间距离,当距离小于200时将该点设为白色(255)。 - 语法错误修复:去掉
Show(Canvas))中的多余右括号。 - 路径优化:改用原始字符串
r"C:\TMP\Lily1.jpg",避免路径中的转义字符问题。
内容的提问来源于stack exchange,提问作者Sigurd09
相关产品推荐
相关产品推荐

