opencv-python[cv2]读取中文路径图像

前言

随着AI人工智能的不断发展,图像处理这门技术也越来越重要,很多学校本科都开启了图像处理这门课程,学习图像处理开发,自然就绕不开opencv-python[cv2]这个由intel主导的开源库。

1. cv2是什么?

cv2是指OpenCV的Python接口库。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。cv2库是OpenCV的官方Python接口,使得开发者可以使用Python语言调用OpenCV库中的各种函数和功能。cv2库提供了各种图像处理和计算机视觉的功能,包括图像读取和保存、图像的变换和滤波、边缘检测、特征提取、目标检测、图像识别等。通过cv2库,开发者可以使用Python编写简洁而强大的图像处理和计算机视觉应用程序。

2. 问题描述

很多刚刚学习opencv的学生在使用python的opencv-python[cv2]的时候,会碰到过读取中文路径的图片失败的问题,明明图像文件是存在的,但是程序死活运行失败,根本原因是 cv2.imread并不支持中文路径导致的。

1.1 问题复现

首先,图像文件路径下面确实存在一张’'小猫小狗.jpg",如下图所示.
在这里插入图片描述
代码如下(直接调用cv.imread):

import cv2

image_file_name= './图像/小猫小狗.jpg'
image_numpy_data = cv2.imread(image_file_name)

cv2.imshow('显示图像', image_numpy_data)

cv2.waitKey(0)

当我们配置好python环境,运行main.py时,出现如下错误提示.

cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:356: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

这个错误是告诉开发者图像文件为None,如果新同学不知道如何配置环境,可以参考博主写的【Anaconda3与PyCharm安装配置保姆教程

1.2 问题修复

既然cv2.imread无法直接读取,那我们可以通过numpy来间接读取,博主这边给一个修复后的代码供大家参考

import cv2
import numpy as np

# 通过numpy读取中文路径图像
def image_read_from_chinese_path(image_file_name):
    image_numpy_data = cv2.imdecode(np.fromfile(image_file_name, dtype=np.uint8), -1)
    #返回numpy的ndarray
    return image_numpy_data

image_file_name = './图像/小猫小狗.jpg'
image_numpy_data = image_read_from_chinese_path(image_file_name)

cv2.imshow('image', image_numpy_data)
cv2.waitKey(0)

再次运行,imshow成功显示图像
在这里插入图片描述

1.3 总结

本文的解决思路是通过numpy库,np.fromfile()函数用于读取图像文件的原始数据,并将其存储在NumPy数组中。然后,使用cv2.imdecode()函数将NumPy数组解码为OpenCV格式的图像数据。

通过使用numpy库,可以避免cv2.imread()函数对中文路径的限制,并成功读取包含中文字符的图像文件。

结束语

由于博主能力有限,本篇文章中提及的方法,也难免会有疏漏之处,希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值