我正在使用不同的变换编码,例如DWT,DCT和DFT。我一直在质疑我在执行时所使用的数据结构的方法。下面是一个例子,比如我想分析图像中的每个像素,也许是为了执行某种编码。我在这里所做的就是在同一个变量“a”上加载每个像素来演示一个非常通用的例子。这段代码片段需要大约66毫秒,这对我来说非常慢。在个人读取和写入像素时,是否有更好的图像处理方法?
class Example():
def __init__(self):
self.load_image("lena_312.png") #312 by 312
def load_image(self, directory):
self.img = cv2.imread(directory)
self.height,self.width,self.channel = self.img.shape
self.img_org = np.matrix(self.img[:,:,0]) #Image is greyscale
def test(self):
for j in range(0,self.height):
for i in range(0,self.width):
a = self.img_org[j,i]
if __name__ == "__main__":
EX = Example()
start = time.time()
EX.test()
print time.time()-start
答案 0 :(得分:0)
纯Python每像素访问预计会非常慢。 Python列表和Python整数对于通常依赖CPU缓存和流水线操作的数值繁重的操作来说会产生巨大的开销。
如果您必须在不受限制的Python中编写自定义算法代码,请考虑使用Pillow或numpy / scipy to do massive bitmap operations,或者至少尝试使用Cython。