您现在的位置是:首页 > 正文

opencv_python使用cv2.imread()读取中文路径报错问题 热门推荐

2024-02-29 14:05:13阅读 0

1 说明

本篇中使用的opencv版本为3.3,python使用的版本为3.6。

2.问题描述

本人小白一枚,由于毕业论文做图像识别方面的内容,所以最近才开始学习python,老师指导我用opencv做图片去噪处理,所以最近才知道opencv是干嘛用的,opencv才安装好,想尝试一下简单的使用opencv读取、显示和存储一个图片。然而一开始就给了我一个下马威。

开始代码如下,只涉及到图片的读取和显示:

# -*- coding: utf-8 -*-
import cv2
if __name__=='__main__':
    path='E:/毕业设计/images/百合1.jpg'
    img=cv2.imread(path,1)
    cv2.namedWindow(image,cv2.WINDOW_AUTOSIZE)
    cv2.imshow(image,img)
    k=cv2.waitKey(0)

运行后报了这个错误:

cv2.imshow('image',img)
cv2.error: C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:325: error: (-215) size.width>0 && size.height>0 in function cv::imshow

百度了一下:原因是因为文件路径错误,未读取到图片。但是我反复确认我的图片路径没有错误,所以想到会不会是中文的字符编码问题导致读取不到图片,于是我在D盘下放了一张英文命名的图片,就修改了代码的path改为‘D:/ Hydrangeas.jpg’,再次运行上述代码,结果如下:



成功读取并显示,则表明我的猜想是正确的,是因为路径的中文编码导致图片读取不成功。

3.解决办法

但是可惜的是,小白我并没有解决办法,于是又问度娘,寻找python3opencv读取中文名称的解决办法。

最后在一个知乎的问答中找到了答案:



链接如下:https://www.zhihu.com/question/67157462/answer/251754530

我尝试了,果然能成功读取中文路径与中文名称的图片,事实证明该方法是正确的。然而这位答主的回答居然没有赞,我果断的给她点了个赞,不知为何题主竟然都没赞。

然后又在另一个知乎问答下发现了另一个,包括opencv读取和存储中文名称和路径的方法:


附上链接:https://www.zhihu.com/question/47184512

尝试后,果然都是对的,感谢知乎,感谢两位大佬!

附上我修改后的代码:

# -*- coding: utf-8 -*-
import cv2
import numpy as np

## 读取图像,解决imread不能读取中文路径的问题
def cv_imread(filePath):
    cv_img=cv2.imdecode(np.fromfile(filePath,dtype=np.uint8),-1)
    ## imdecode读取的是rgb,如果后续需要opencv处理的话,需要转换成bgr,转换后图片颜色会变化
    ##cv_img=cv2.cvtColor(cv_img,cv2.COLOR_RGB2BGR)
    return cv_img
if __name__=='__main__':
    path='E:/images/百合/百合1.jpg'
    img=cv_imread(path)
    cv2.namedWindow('lena',cv2.WINDOW_AUTOSIZE)
    cv2.imshow('lena',img)
    k=cv2.waitKey(0)
    ##这样是保存到了和当前运行目录下
    cv2.imencode('.jpg', img)[1].tofile('百合.jpg')



网站文章

  • Pytorch分布式报错1.non-zero exit status,2.cuDNN error:CUDNN_STATUS_INTERNAL_,3.CUDA error:illegal memory

    1.returned non-zero exit status 1. One epoch之后报错,信息如下: RuntimeError: Expected to have finished reduc...

    2024-02-29 14:04:45
  • 【转载】JDK集合源码解析

    1、转载至:Vector、Stack、ArrayList、LinkedList、HashMap源码解析Vector:继承了AbstractList抽象类,实现了List接口,实现了RandomAcce...

    2024-02-29 14:04:36
  • lucene简单应用

    lucene简单应用

    本文只涉及lucene的应用,关于其原理等暂不涉及,有时间再单独写一篇。用常用的文章类作为例子,实体类代码如下:@Datapublic class Article implements Serializable{ private Long id; private String title; private String describe; priva

    2024-02-29 14:04:25
  • create-react-app创建react项目使用less的修改过程。

    在使用create-react-app创建react项目的时候,原始的项目结构是不能够使用less预编译器。使用 yarn reject暴露配置文件$ yarn reject$ react-scripts ejectNOTE: Create React App 2 supports TypeScript, Sass, CSS Modules and more without eje...

    2024-02-29 14:04:18
  • 概率论 —— 相关分布以及期望方差的求法汇总

    概率论 —— 相关分布以及期望方差的求法汇总

    离散型 两点分布 超几何分布 二项分布 泊松分布 连续型 均匀分布 指数分布 正态分布 标准正态分布

    2024-02-29 14:03:48
  • Spring AOP的设计与实现

    本节一起学习Spring AOP的设计与实现具体来说,在Spring AOP实现中,使用的核心技术是动态代理,而这种动态代理实际上是JDK的一个特性。通过JDK的动态代理特性,可以为任意JAVA对象创...

    2024-02-29 14:03:39
  • 【转】Openwrt iptables分析

    【转】Openwrt iptables分析

    转自:https://www.cnblogs.com/tanhangbo/p/4550455.html重点学习如何一步步画出iptables关联表这里将载有Openwrt的WR841N的路由表dump出来分析一下。这个是dump出iptables的命令root@OpenWrt:/etc/config# iptables-save这里分为4部分...

    2024-02-29 14:03:31
  • 静态杂波滤波算法

    静态杂波滤波算法

    MTI和相量均值相消算法两种算法在原理的核心思想上相似。MTI是直接利用相位的差值消除静态杂波而相量均值相消算法是通过相量叠加再求平均然后做差,去除静态杂波。因此MTI仅仅是抑制了静态目标的相位,对于微动目标不友好。而相量均值相消算法则通过求均值,在抑制静止目标相位的同时极大提高了动目标或者微动目标的信噪比。

    2024-02-29 14:03:01
  • Emoji表情符号录入MySQL数据库报错的解决方案

    java MySQL插入数据出现 Incorrect string value: ‘xF0x9Fx92x8BTi…’错误查看tomcat后台日志,核心报错信息如下Caused by: java.sql...

    2024-02-29 14:02:33
  • 数据挖掘 日期转换表

    时间变量无法直接进入建模数据集,因为时间是无限增长的,在历史数据中出现的时间肯定不同于将来模型所需应用的数据集中出现的时间,所以直接使用历 史数据的时间建立的模型就无法应用于将来的数据集。如果要在建模过程中考虑时间变量,就必须对其进行转换。常用的转换有如下几种:1.转换为距某一基准时间的时间长短,例如,“距离××年××月××日的天数”、“距离下一次春节的周数”等。2.转换为季节性信息,例如,一年中

    2024-02-29 14:02:04