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

  • Post author:
  • Post category:其他




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的操作,那么对于图片的分割也能理得更清楚。类似于一般的数组索引,按维数依次索引,从外往里,

    所以在索引图片时,应该是先索引行,再索引列

    。如下所示。

    在这里插入图片描述

    在这里插入图片描述



版权声明:本文为ZHOU_YONG915原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。