【OpenCV】常见问题及解决办法

0 前言

  本篇博客主要是总结OpenCV使用过程中遇到的一些问题,以及对应的解决办法,这里重点是关注OpenCV,既有基于C++的,也有基于Python的,比较全面,而且也会随着我的学习经历不断更新。

OpenCV环境配置相关:

1 中文乱码问题

  OpenCV对中文的支持很不好,比如显示图片的窗口名不能是中文,否则会出现乱码;同样,读取和保存的图片路径中也不能包含中文,否则会报错。
  不过貌似基于VS配置的OpenCV能够解决这个问题,可能是因为使用的编译器不一样的缘故,VSCode配置OpenCV一般使用的是MinGW这一套编译器,而VS配置的使用的是微软的MSVC编译器。
  出现乱码是因为VS默认的编码方式为GBK/GB2312,而OpenCV需要的编码方式为UTF-8,而且注意是“with BOM”版本,否则对于OpenCV代码会报错 “c2001 常量中有换行符”
  但每次手动更改文件的编码方式有点麻烦,这里推荐安装一个插件:
在这里插入图片描述

在这里插入图片描述

  对于python中的OpenCV,一开始以为编码方式会比较兼容,但是很遗憾,在python-opencv中,窗口名设置为中文仍然会乱码。

2 非法路径问题

  读取和保存图片不能有中文这是一个经典问题了,但是没想到的是,OpenCV对于非法路径似乎处理得不够好。
  之前无意间遇到一个问题,那就是在python中使用opencv保存图片老是不执行,也不报错。但是换一个一般的文件名又能够保存,后来经过测试发现应该是文件路径的问题,不是有中文,而是有冒号。通过查找资料才知道,Windows中文件路径不能包含冒号,因为冒号有其他的含义。记录一下,这种问题确实有点少见。

参考链接

3 图片索引与分片

  在对图片进行处理时,经常会遇到需要取图片的一部分的情况,即对图片的索引,但是对于不熟悉图片结构的人来说,可能会遇到一些问题,这里彻底理清楚一下。

  • 首先是求图片shape
    import cv2
    img = cv2.imread("101249.jpg")
    print(img.shape)
    

在这里插入图片描述
需要注意这个输出值,其实就是输出数组的维度而已。而数组维度一般是先行后列,所以自然这个结果表示这张图有706行,1258列,每一个元素包含三个数值,即三通道RGB。而在图片处理中,一般以左上角为零点,向右为x轴,向下为y轴,x轴方向称为宽度(Width),y轴方向称为高度(Height)。所以总结来说,shape函数的格式为:height, width, channels = img.shape

  • 图片切片与索引
      理解了上面求shape的操作,那么对于图片的分割也能理得更清楚。类似于一般的数组索引,按维数依次索引,从外往里,所以在索引图片时,应该是先索引行,再索引列。如下所示。
    在这里插入图片描述
    在这里插入图片描述
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记录无知岁月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值