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

文章目录

  • 前言
  • 1. cv2是什么?
  • 2. 问题描述
    • 1.1 问题复现
    • 1.2 问题修复
    • 1.3 总结
  • 结束语

前言

随着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",如下图所示.
opencv-python[cv2]读取中文路径图像_第1张图片
代码如下(直接调用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成功显示图像
opencv-python[cv2]读取中文路径图像_第2张图片

1.3 总结

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

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

结束语

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

你可能感兴趣的:(OpenCV,opencv,python,计算机视觉)