【发布时间】:2016-06-13 13:34:24
【问题描述】:
我有一些显示曲线的实验截图,我想将该曲线提取到一个数组中以分析数据。
我的方法的第一部分是将图像转换为具有良好选择的阈值的二进制图像,该阈值仅留下曲线。这很好用,但第二部分包括从曲线中提取一个数组却没有。我尝试了浏览图片并识别白色像素的“幼稚”方法,但结果与预期相去甚远。
有人有解决办法吗?
import numpy as np
import matplotlib.pyplot as plt
import PIL.Image as img
gray = img.open('0100k.jpg').convert('L')
bw = gray.point(lambda x: 0 if x<240 else 255, '1')
bw = bw.convert('1')
bw.show()
pix = np.array(bw)
(n,m) = pix.shape
curve = np.zeros(n)
for i in range(n):
for j in range(m):
if pix[i,j] == 1:
curve[i] = j
plt.plot(curve)
plt.show()
【问题讨论】:
-
我不禁想知道您是否将
i和j颠倒了,因为np.array返回一个列表列表。第一个元素访问内部列表(垂直),第二个元素访问每个列表的各个元素(水平)。 -
你是对的。另外,0,0 点在左上角,所以为了让它工作,我发现这样更好:
(n,m) = pix.shape curve = np.zeros(m) for i in range(n): for j in range(m): if pix[i,j] == 1: curve[j] = n-i -
啊,好吧,我很高兴你知道了。这也是我沮丧的根源。在所有数学中,原点都在左下角。为什么许多图书馆坚持不这样,我无法理解。
标签: python python-2.7 matplotlib