请修改一下python调用的测试代码
时间: 2024-09-12 07:05:16 浏览: 37
在Python中,如果你的图片文件名包含非ASCII字符或者不是UTF-8编码,直接使用`b"pull.jpg"`传递可能会有问题。为了处理这种情况,你可以尝试先将文件名转为UTF-8编码再创建字节对象。这里是修改后的代码示例:
```python
import ctypes
import os
import io
import time
import cv2
import numpy as np
def encode_file_name(name):
"""编码文件名以便于兼容非ASCII字符"""
return name.encode('utf-8')
start = time.time()
# 加载动态链接库
lib = ctypes.CDLL('./libimage_saver.so') # 替换为你的so文件路径
# 设置函数参数类型
lib.save_image.argtypes = [ctypes.POINTER(ctypes.c_ubyte), ctypes.c_char_p]
lib.save_image.restype = None
# 读取图像并将文件名编码
image = cv2.imread("pull.jpg")
filename_encoded = encode_file_name("pull.jpg") # 或者使用os.path.basename(os.path.abspath('pull.jpg'))
# 将numpy数组转换为ctypes pointer
image_data = image.ctypes.data_as(ctypes.POINTER(ctypes.c_ubyte))
# 调用函数保存图像
lib.save_image(image_data, filename_encoded)
print(f"总的时间为:{time.time() - start}")
```
在这个版本里,我们添加了一个辅助函数`encode_file_name`来确保文件名在跨平台环境下可用。现在无论文件名是什么,我们都先将其转换为字节串。请注意,你需要确保你的操作系统对文件名的处理也支持UTF-8。
阅读全文