我有一个灰色的输入图像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行代码?
答案 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秒。