将python代码实现为cython cod

2024-04-20 11:01:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经尝试将下面的python脚本实现到cython中,以减少运行时间。我对python和/或cython的经验很少。我试着用下面这句话,但没有用。在cython中运行python脚本有什么“简单”的方法吗?或者我必须更改整个脚本吗?你知道吗

# What I tried:
import time
import pyximport; pyximport.install()
import kandetlykkes

# The python codes:
import timeit
start = timeit.default_timer()
from PIL import Image, ImageDraw # Importerer biblioteket

# Load image:
input_image = Image.open("beatles.jpg") # Loads an image from the hard drive
input_pixels = input_image.load()

# Box Blur kernel
box_kernel = [[1 / 9, 1 / 9, 1 / 9], [1 / 9, 1 / 9, 1 / 9], [1 / 9, 1 / 9, 1 / 9]]

# Select kernel here:
kernel = box_kernel

# Middle of the kernel
offset = len(kernel) // 2

# Creating the output image
output_image = Image.new("RGB", input_image.size)
draw = ImageDraw.Draw(output_image)


# Beregne konvolusjon mellom intensity (original bilde) og  kernel 
for x in range(offset, input_image.width - offset):
    for y in range(offset, input_image.height - offset):
        acc = [0, 0, 0]
        for a in range(len(kernel)):
            for b in range(len(kernel)):
                xn = x + a - offset
                yn = y + b - offset
                pixel = input_pixels[xn, yn]
                acc[0] += pixel[0] * kernel[a][b]
                acc[1] += pixel[1] * kernel[a][b]
                acc[2] += pixel[2] * kernel[a][b]

draw.point((x, y), (int(acc[0]), int(acc[1]), int(acc[2])))

output_image.save("Beatles box blurr.png")

stop = timeit.default_timer()

print('Time: ', stop - start)  

Tags: inimageimport脚本forinputoutputrange