一个小巧、简单的图像缩放器。
项目描述
一个支持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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0ce3b77562f1db74b2035ccaf62807af043333ce655e71effd6ec85fbf8ded06 |
|
MD5 | afbeaabe749f799cc506f29f9477c081 |
|
BLAKE2b-256 | 0d596b6495fe9bb3153306a4bd6dd24c78ff74eaf64f90fc6e545ede0574cfbe |
tinyscaler-1.2.8-cp312-cp312-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6a7c18d9c082f30193bd23a6eb8ad84d2ee9b224138c8c25a76db96cba71a473 |
|
MD5 | bd5348f696574e6abbc6404b804a8aa3 |
|
BLAKE2b-256 | 68d00b0abfde6acdf79b41ea685067a52d3e47f3b1fb4a0f4f49d9c6f281a3c7 |
tinyscaler-1.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7474fe93740b0aa045e4e2ad60f8df6d5d570c4ea903c6d63ca3868efd8f4e22 |
|
MD5 | cfb9b6f94d575cf183f8b401e5343624 |
|
BLAKE2b-256 | b7cf528a73de4ad128de99bf7cc0e80f236aeeb36fda1e2768a7eb73210a91ff |
tinyscaler-1.2.8-cp312-cp312-macosx_10_9_universal2.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fcafd6a8b7ac8c8eabc560f99f987e3e9c00b32a5f3472b28ee865db9bf264b2 |
|
MD5 | b3e5d107e3008c3597940d93fe32478f |
|
BLAKE2b-256 | 4b6506fa456d375b71672affd292dd79f199b21a574eb0501afa142f85133b99 |
tinyscaler-1.2.8-cp311-cp311-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 93869b729bc2d596e2b2e0803d2f9e0e1a0baced6c96b8c21af178b3061b3fba |
|
MD5 | fb528eec28af32d804430bdf5624dffa |
|
BLAKE2b-256 | 218fc064ace9fe32a3968eedd1ae19f079020f0fdd55e811dfd1c7a2b6cc442f |
tinyscaler-1.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a7dbf9f80ba08918c304261e2f8e3356eccbc925364b706cef2997f0abf0fc91 |
|
MD5 | 30738bef637bb29dc8f29dd397f06978 |
|
BLAKE2b-256 | 3b0ec52b316dccb2181521a5faca6ef404670e567dddb6f38cbd72175af23d49 |
tinyscaler-1.2.8-cp311-cp311-macosx_10_9_universal2.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 57ad9b0203e984ad140b31f0fe82f8bd82e4c31574461264a9a6e7f7d105eb50 |
|
MD5 | 36a41474e2d67f3d9aa8e2bdbd262180 |
|
BLAKE2b-256 | 01c9a2dbce5c9ecfaff4887bc0f5ff2288c678e25810801e84ddd737d4c0f3e8 |
tinyscaler-1.2.8-cp310-cp310-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 34d43fad3e09331b7a9259ee11ff4c209c31f00129b3a0c98480f7e43c789c2f |
|
MD5 | bf28c18af6d4f75820eb986c450b0c1c |
|
BLAKE2b-256 | 707eb42030012265686e2f95f2449dd7e40b1e54d92a371f90b11c11bdd8b6c3 |
tinyscaler-1.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fb30db6782df95c34b294266876e71fd3d32dd3d33bf4c8ec72d07f570ae7bca |
|
MD5 | 6d9688b5a1630f5c6694556353defdf1 |
|
BLAKE2b-256 | b7b23c38f6727b1618160248b6c56486eb006db153c2ca99381251343cd54376 |
哈希值 用于 tinyscaler-1.2.8-cp310-cp310-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b69a0414d626ba5d075b93546f37ece0c10f690f7d3ce3f162c2316ac1667511 |
|
MD5 | 39b43522b6d91de754165950216121e1 |
|
BLAKE2b-256 | 96140b47fbc882faa2358fc205734bd4b872c84539ef8231bbf1ef2eb5e99506 |
哈希值 用于 tinyscaler-1.2.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | aa5eb3d4ba1fb803e1616fde7f58126355a47c6ca79c3393907e21c677bc5d37 |
|
MD5 | 856c37f3426f4599cde9895320ae8428 |
|
BLAKE2b-256 | eb31c54ebf036e092cc31ecfd7ccc2970165ce72679f3c1be43f7cddc1aa5e2d |
哈希值 用于 tinyscaler-1.2.8-cp39-cp39-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3143352056dc9ac2ab87795fa3f36498c52ae603b76b3b73189544c588f46d77 |
|
MD5 | ca77ca71a75966e7bd7eae2a80f1857b |
|
BLAKE2b-256 | 6b1bb291ab1c819a1bca3e6fa1f924d5fa14fc12603504bc7f5cf63599fe7878 |
哈希值 用于 tinyscaler-1.2.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7969396adaaaf65694e2cacda394922f6c1939afff7c1202f3a32ee9a0067e30 |
|
MD5 | d8c57bc3fca30c66a854f5d373766cf6 |
|
BLAKE2b-256 | c2f821cde699fcc1b75abc64e0d74c4551a116e30fd0f0e25fe97ce4dd8b2c81 |
哈希值 用于 tinyscaler-1.2.8-cp38-cp38-macosx_11_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 393aafdbbf0733cd328ee07b07ea3be442f640b232c0c3d31915ed047ea93162 |
|
MD5 | b584702b89a9b851f134c4b7e3f0deab |
|
BLAKE2b-256 | bcc3278017fafb1ca9c66c7f520bcf66b73d501b0a4555d4b7b3eade464d5168 |