目录
前言
opencv是一个计算机视觉处理软件库,拥有强大的功能和高效的性能。当然在使用过程中,难免有各种问题各种坑,此文就是为了把问题解决过程做下记录,方便别人看,方便自己看。
一、opencv介绍
opencv是一个计算机视觉处理软件库,为了保证在各个平台均可高效稳定运行,它底层是通过C++实现的,这样就让它拥有了强大的功能和高效的性能。
但是由于早期版本的原因,存在一些与目前主流使用不兼容的问题与坑点。
二、问题与解决
2.1RGB通道顺序
一般图片处理类库的通道顺序就是RGB,但是opencv的是反过来的,即BGR
如果需要对相关通道做计算、在其他类库中调用,则需要进行通道转换
cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
2.2读取中文路径
opencv对中文支持是有问题的,对于utf8编码支持有问题,导致读取img对象是None
有个解决方法就是,先通过np将图像转为字节流形式,再给到opencv。这里我写了一个方法,后续直接调用这个方法即可
import cv2
import numpy as np
def cv_imread(file_path):
"""
读取图像,解决imread不能读取中文路径路径的问题
:param file_path: 图像路径
"""
buf=np.fromfile(file_path,dtype=np.uint8)
#imdedcode读取的是RGB图像
cv_img = cv2.imdecode(buf,-1)
return cv_img
2.3设置中文标题
思路基本是绕过直接使用opencv的方法。同样写了一个方法
import win32gui
# import win32con
def cv_set_titile(oldTitle,newTitle='中文',oneRun=False):
"""
设置窗口标题
:param oldTitle: 旧标题
:param newTitle: 新标题
:param oneRun: 是否只运行一次
:return:
"""
if oneRun == False:
# 根据窗口名称查找其句柄 然后使用函数修改其标题
# 尽量选择一个不常见的英文名 防止误该已有#的窗口标题 初始化时通常取无意义的名字 比如这里取‘aa’
handle = win32gui.FindWindow(0, oldTitle)
win32gui.SetWindowText(handle, newTitle)
oneRun= True
return oneRun
调用
cv2.imshow("aaa", img)
cv_set_titile("aaa", newTitle='中文标题')
注意这里是通过标题找到对应窗口,调用windows api去修改窗口标题的,需要尽量避免标题有一样的,这样就可能出问题。或者直接设置为guid的,这样容错率更好。
2.4图片内容中文
这块可以直接看如下链接
【OpenCV】学习课-图像添加文字(3)!_cv2添加文字-CSDN博客https://blog.csdn.net/pengneng123/article/details/130646667
2.5保存中文路径
cv2.imwrite()用来将图像文件保存到某个路径下,这里我使用了中文路径,虽然没报错,但是文件却没保存成功。开始怀疑是不是类似读取图像类似的文件路径问题。查了下还真是如此
def cv_imwrite(file_path, img):
"""
写入图像,解决imread不能写入中文路径路径的问题
:param file_path: 图像路径
"""
ext=os.path.splitext(file_path)[1]
cv2.imencode(ext, img)[1].tofile(file_path)
三、总结
本文介绍了在使用opencv过程中遇到的问题与解决方法,方便日后使用与查阅。该文档也会不断更新,也希望可以帮助有需要的小伙伴。