赞
踩
随着AI人工智能的不断发展,图像处理这门技术也越来越重要,很多学校本科都开启了图像处理这门课程,学习图像处理开发,自然就绕不开opencv-python[cv2]这个由intel主导的开源库。
cv2是指OpenCV的Python接口库。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。cv2库是OpenCV的官方Python接口,使得开发者可以使用Python语言调用OpenCV库中的各种函数和功能。cv2库提供了各种图像处理和计算机视觉的功能,包括图像读取和保存、图像的变换和滤波、边缘检测、特征提取、目标检测、图像识别等。通过cv2库,开发者可以使用Python编写简洁而强大的图像处理和计算机视觉应用程序。
很多刚刚学习opencv的学生在使用python的opencv-python[cv2]的时候,会碰到过读取中文路径的图片失败的问题,明明图像文件是存在的,但是程序死活运行失败,根本原因是 cv2.imread并不支持中文路径导致的。
首先,图像文件路径下面确实存在一张’'小猫小狗.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安装配置保姆教程】
既然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成功显示图像
本文的解决思路是通过numpy库,np.fromfile()函数用于读取图像文件的原始数据,并将其存储在NumPy数组中。然后,使用cv2.imdecode()函数将NumPy数组解码为OpenCV格式的图像数据。
通过使用numpy库,可以避免cv2.imread()函数对中文路径的限制,并成功读取包含中文字符的图像文件。
由于博主能力有限,本篇文章中提及的方法,也难免会有疏漏之处,希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。