【发布时间】:2019-07-07 19:51:58
【问题描述】:
我是 Python 新手,希望使用 for 循环来分析图像的垂直切片。当每一行独立执行时,我的 for 循环就会起作用。但是,当一起执行时,第一行中创建的对象会采用第二行中创建的对象的值。
# create image of random noise
im = np.random.randint(0,255,(100,200))
# create empty y and dy objects with same size as original image
empty = np.zeros([im.shape[0],im.shape[1]])
y = empty
dy = empty
# get pixel intensities in vertical strips, and then take first derivative
for i in xrange(im.shape[1]):
y[:,i] = im[:,i].astype(np.int32)
dy[:,i] = np.insert(diff(y[:,i]),0,0)
我希望得到一个与我的图像im 相同的对象y,以及一个与im 和y 具有相同尺寸但包含表示像素一阶导数的值的对象dy沿图像垂直方向的强度。
相反,我看到dy 已正确计算,但y 已被与dy 相同的值覆盖。为什么对象y 会被覆盖?
澄清一下:我的原始图像是类型“uint8”,无法区分。我必须转换为“int32”来计算导数。在np.random.randint() 的情况下,示例图像已经在int32 中。所以在提供的示例中创建对象y 是不必要的,但我需要它来获取图像切片的导数。
【问题讨论】:
-
什么是
diff?
标签: python object for-loop overwrite