四舍五入以将其存储为图像的像素值

时间:2019-06-18 21:15:17

标签: python-3.x

我有一个灰色的输入图像Img1(2D数组,只有1个通道-不是RGB),一个整数值bias_value和一个浮点值Step。我想创建另一个图像Img2,其中Img2的像素值带有来自Img1的修改后的值,如下所示:

for i in range(high):
   for j in range(width):
         Img2[i, j] = round((int(Img1[i, j]) - bias_value) * Step)

请注意,来自Img1和Img2的像素值是从0到255的整数,但是当乘以Step时,每个像素值都变成浮点数,因此需要使用“舍入”。 好的,上面的代码可以正常工作,但是它持续约0.4秒。我已经实验性地检查出,仅通过删除上面的两个循环,我的代码运行时间减少到了0.02秒左右,因此,我尝试一次执行整个图像操作,而没有任何循环。我尝试过:

Img2= round((Img1[:, :] - bias_value) * Step)

但是出现错误:“ TypeError:类型数组未定义 round 方法”。而且,通过删除舍入部分,代码将继续,但是变量Img2不会生成有效的图像(您可以通过显示带有的图像来对其进行检查):

cv.imshow("Capturing", Img2)
cv.waitKey(0)

因此,imshow出现错误:“输入图像的深度不受支持”。

执行以上操作而没有循环的任何技巧吗?而仅使用1行代码?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,只需将两个循环替换为:

Img2= round((Img1[:, :] - bias_value) * Step)
Img2= np.random.randint(0, 255, (high, width)).astype(np.uint8)

np来自哪里

import numpy as np

运行时间少于0.02秒。