跳转到主要内容

一个小巧、简单的图像缩放器。

项目描述

一个支持x86_64和Arm(Neon)架构SIMD指令集的小型CPU图像缩放库。该项目旨在替代OpenCV进行图像缩放,解决安装不便和兼容性问题。我们开发这个库是为了未来在Gymnasium和PettingZoo封装器中使用。

安装

您可以使用pip install tinyscaler从PyPI进行安装。支持Python >=3.8的Linux和macOS。

用法

Tinyscaler包含一个外部函数scale,它使用numpy数组作为输入的图像和新的缩放形状,返回缩放后的图像。

import numpy as np
import tinyscaler

img = np.random.rand(64, 64, 4).astype(np.float32)

resize_img = tinyscaler.scale(img, (32, 32))
print(resize_img.shape, resize_img.dtype)  # (32, 32) np.float32

TinyScaler支持模式='area','bilinear'和'mode='nearest'过滤。它还允许用户传递目标缓冲区以避免重复的内存分配。

区域过滤主要适用于缩小,在放大时即使设置了区域过滤也将使用双线性过滤。当缩小比例小于或等于2倍时,区域过滤可能不值得。

TinyScaler通过单个函数使用。完整签名如下

scale(src : np.ndarray, size : tuple, mode='area', dst : np.ndarray = None)

请注意,size元组参数是(width, height)。然而,numpy数组的维度顺序为(height, width, channels)。这类似于OpenCV。

TinyScaler期望一个连续的numpy数组。如果它不是连续的,它将抛出错误。您可以通过调用np.ascontiguousarray使非连续的numpy数组连续。通常numpy数组已经是连续的。

如果最终数组的维度不是4(RGBA),它将自动转换为它。此外,如果数组是uint8,它将被转换为float32。因此,首选的数组形状为(height, width, 4)dtype=np.float32

最后,缩小是TinyScaler的重点。它也可以放大,但在此情况下,它可能不会像更复杂的可分离算法那样快。

性能

在一个简单的基准测试中,我们使用双线性过滤将相同的图像(4928x3279)缩放到(852x567),并使用几个库进行了100次缩放。以下是AMD 1950x上(以Python的perf_counter测量的秒数)所用的时间:

Time elapsed for tinyscaler: 0.7968465110002398
Time elapsed for OpenCV: 0.48667862100001
Time elapsed for Pillow: 12.672875003999707
Time elapsed for skimage: 164.45401711399973

以及区域过滤(仅TinyScaler和OpenCV)

Time elapsed for tinyscaler: 4.34793155800071
Time elapsed for OpenCV: 8.118138265999733

所有方法都被强制使用单个线程。对于双线性过滤,OpenCV比TinyScaler稍快,但TinyScaler仍然非常快。

有趣的是,对于区域过滤,TinyScaler更快(几乎是2倍)。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

tinyscaler-1.2.8.tar.gz (156.9 kB 查看散列)

上传时间

构建分布

tinyscaler-1.2.8-cp312-cp312-win_amd64.whl (83.8 kB 查看散列)

上传时间 CPython 3.12 Windows x86-64

tinyscaler-1.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (563.6 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64

tinyscaler-1.2.8-cp312-cp312-macosx_10_9_universal2.whl (179.8 kB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

tinyscaler-1.2.8-cp311-cp311-win_amd64.whl (84.0 kB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

tinyscaler-1.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (563.3 kB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

tinyscaler-1.2.8-cp311-cp311-macosx_10_9_universal2.whl (178.3 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

tinyscaler-1.2.8-cp310-cp310-win_amd64.whl (83.9 kB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

tinyscaler-1.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (522.8 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

tinyscaler-1.2.8-cp310-cp310-macosx_10_9_universal2.whl (178.5 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

tinyscaler-1.2.8-cp39-cp39-win_amd64.whl (84.5 kB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

tinyscaler-1.2.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (524.8 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

tinyscaler-1.2.8-cp39-cp39-macosx_10_9_universal2.whl (179.7 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

tinyscaler-1.2.8-cp38-cp38-win_amd64.whl (84.6 kB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

tinyscaler-1.2.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (534.4 kB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64

tinyscaler-1.2.8-cp38-cp38-macosx_11_0_universal2.whl (179.3 kB 查看哈希值)

上传于 CPython 3.8 macOS 11.0+ universal2 (ARM64, x86-64)

由以下支持