Matplotlib绘图图像翻转问题:为何生成的图像出现翻转?
图像翻转原因分析
核心问题出在Matplotlib不同函数的坐标系统不匹配:
plt.imshow()默认以图像左上角为坐标原点,y轴数值从上到下递增(符合图像显示的常规逻辑)- 你通过数组索引获取的
x[i](行索引)、y[i](列索引),在plt.scatter()中被当作笛卡尔坐标处理——笛卡尔坐标原点在左下角,y轴数值从下到上递增。
你的代码里,用随机生成的行索引x作为scatter的x坐标,列索引y作为scatter的y坐标,这就导致绘制的点和imshow()显示的图像在纵向方向完全颠倒,看起来像是图像翻转了。
解决方法
可以任选一种方式修正坐标对齐问题:
- 让
imshow()使用笛卡尔坐标系统,设置origin='lower':
plt.imshow(img, cmap='gray', origin='lower')
- 调整scatter的坐标参数,适配
imshow()的默认坐标:
把scatter的调用改成:
plt.scatter(points_in[1], img.shape[0] - points_in[0], c='b', s=0.1) plt.scatter(points_out[1], img.shape[0] - points_out[0], c='r', s=0.1)
另外你代码里两次执行img = -img + 1只是反转图像灰度,和翻转问题无关。
内容的提问来源于stack exchange,提问作者HJY
相关产品推荐
相关产品推荐

