如何解决优化基本图像处理Python
我正在尝试完成基本的图像处理。这是我的算法:
找到n。,n + 1.,n + 2。像素的RGB值,然后根据这些值创建新图像。
我要获取第一个像素的红色值,第二个像素的绿色值和第三个像素的蓝色值并创建像素。图像中的每一行都会继续执行此操作。
这是我在python中的示例代码:
import glob
import ntpath
import numpy
from PIL import Image
images = glob.glob('balls/*.png')
data_compressed = numpy.zeros((540,2560,3),dtype=numpy.uint8)
for image_file in images:
print(f'Processing [{image_file}]')
image = Image.open(image_file)
data = numpy.loadasarray(image)
for i in range(0,2559):
for j in range(0,539):
pix_x = j * 3 + 1
red = data[pix_x - 1,i][0]
green = data[pix_x,i][1]
blue = data[pix_x + 1,i][2]
data_compressed[j,i] = [red,green,blue]
im = Image.fromarray(data_compressed)
image_name = ntpath.basename(image_file)
im.save(f'export/{image_name}')
我的输入和输出图像为RGB格式。我的代码每个图像花5秒。我愿意提出优化该任务的任何想法。如有必要,我可以使用c ++或任何其他语言。
解决方法
data_compressed = np.concatenate((
np.expand_dims(data[0:-2][:,:,0],axis=2),np.expand_dims(data[1:-1][:,1],np.expand_dims(data[2:][:,2],axis=2)),axis=2)
- 图片1:原始图片
- Image2:原始图像偏移了一个像素
- Image3:原始图像偏移了两个像素
- 将Image1的通道0,Image2的通道1和Image3的通道3连接起来。
样本
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
image = Image.open("Lenna.png")
data = numpy.asarray(image)
data_compressed = np.concatenate((
np.expand_dims(data[0:-2][:,axis=2)
new_image = Image.fromarray(data_compressed)
如果您希望跨越3个像素以再次计算下一个像素,则可以使用numpy切片
new_image = Image.fromarray(data_compressed[:,::3])
原始图片:
经过3步转换的图像:
,好吧,如果仅是为了提高速度,就应该看看模块Cython。它使您可以指定不同变量的类型,然后将脚本编译为可运行的c代码。在时间复杂度方面,这通常可以带来很大的改进。
,使用普通的python,您只能做很多事情。这是一个小的优化,可以有所帮助,因为它将分配较少的内存。否则,我会像以前所说的那样使用Cython / Numba或使用其他语言。
data_compressed[j,i,0] = data[pix_x - 1,i][0]
data_compressed[j,1] = data[pix_x,i][1]
data_compressed[j,2] = data[pix_x + 1,i][2]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。