OpenCV:cv2.imread读取含有非法字符的文件名时报Segmentation fault(段错误)及解决

cv2.imread(image_path)时,如果遇到读取文件名含有非法字符,如cv2.imread('\udca9\udca6\udca5.jpg'),会报错Segmentation fault. 这个问题很严重,因为会直接core dumped,无法在python代码中catch住。
解决方法是先用numpy读出来,然后转存为img的格式。实战中可以直接使用以下代码:

def cv_imread(file_path = ""):
    img_mat=cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
    return img_mat
def cv_imwrite(file_path , frame ): 
    cv2.imencode('.jpg', frame)[1].tofile(file_path)

https://blog.youkuaiyun.com/babytiger/article/details/92797838

### OpenCV 中 C++ 和 Python 图像读取函数对比 #### 函数签名差异 在 C++ 接口中,`cv::imread()` 的定义如下: ```cpp Mat imread(const String& filename, int flags=IMREAD_COLOR ); ``` 而在 Python 接口中的 `cv2.imread()` 定义则更为简洁[^1]。 ```python cv2.imread(filename[, flags]) -> retval ``` #### 参数说明 对于两个版本的函数来说,第一个参数都是文件路径字符串。第二个可选参数用于指定图像加载模式,在两种语言中都支持相同的标志位选项,比如彩色 (`IMREAD_COLOR`) 或灰度 (`IMREAD_GRAYSCALE`) 加载方式[^3]。 #### 返回值形式 C++ 版本返回的是一个 `cv::Mat` 对象,这是 OpenCV 库内部表示矩阵数据结构的方式;而 Python API 则会给出 NumPy 数组作为结果对象,这使得后续处理更加方便快捷因为可以直接利用丰富的科学计算库来进行操作[^4]。 #### 使用实例展示 下面分别给出了这两种编程环境下如何调用上述提到的方法来完成相同任务——即从磁盘位置读入图片并显示出来的一个简单例子。 ##### C++ ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat img = imread("example.jpg", IMREAD_UNCHANGED); if (img.empty()) { // Check for invalid input printf("Could not open or find the image\n"); return -1; } namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display. imshow("Display window", img); // Show our image inside it. waitKey(0); // Wait indefinitely until keypress destroyAllWindows(); } ``` ##### Python ```python import cv2 as cv image_path = 'example.jpg' img = cv.imread(image_path, cv.IMREAD_UNCHANGED) if img is None: print('Image file could not be read') else: cv.imshow('Loaded Image', img) cv.waitKey(0) cv.destroyAllWindows() ``` 通过以上分析可以看出虽然两者语法上有一定区别但是核心概念保持一致,并且都能很好地满足日常开发需求.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值