浅谈python配置与使用OpenCV踩的一些坑
简介
在使用Python配置和使用OpenCV的过程中,可能会遇到很多问题。本文将会分享一些我在配置和使用OpenCV过程中踩到的坑,并提供一些解决方法。
安装OpenCV
在Windows中安装OpenCV
在Windows系统中,安装OpenCV需要执行以下步骤:
- 去OpenCV官网(https://opencv.org/)下载对应版本的OpenCV安装程序。要注意选择与自己的Python版本兼容的OpenCV版本。并且,要选择包含OpenCV-contrib模块的版本,这样能得到更完整的OpenCV功能。
- 运行安装程序,将OpenCV安装到系统中。安装程序会将OpenCV安装到标准路径:C:\opencv。如果需要将OpenCV安装到其他路径中,可以在安装程序中进行设置。
- 将OpenCV添加到系统环境变量中。需要添加的环境变量包括:OPENCV_DIR(OpenCV的安装路径)、OPENCV_BUILD(OpenCV编译文件的路径)、PYTHONPATH(Python模块搜索路径)等。
- 在Python中导入OpenCV模块,可以使用以下代码:
import cv2 # 导入OpenCV模块
在Linux中安装OpenCV
在Linux中安装OpenCV也需要进行以下步骤:
- 安装C++编译器和其他依赖库。需要使用以下命令安装相关库:
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
- 下载OpenCV源码。可以从OpenCV官网下载最新版本的源码,也可以使用以下命令从Github上下载:
git clone https://github.com/opencv/opencv.git
- 编译和安装OpenCV。需要进入下载后的OpenCV目录,然后执行以下命令:
mkdir build && cd build
cmake ..
make -j4 # 使用4个CPU核心编译OpenCV
sudo make install
- 将OpenCV添加到 Python 的系统路径中。需要在Python中执行以下命令:
import sys
sys.path.append('/usr/local/python/cv2/python-3.6/cv2.so') # 根据实际安装路径修改
OpenCV常见问题
关于cv2.imshow()无反应的问题
当使用cv2.imshow()函数显示图像时,如果没有反应,可能是以下原因:
- 缺少GUI后端库。需要安装 GTK3 或者 Qt5 等 GUI 后端库。可以使用以下命令安装 GTK3:
sudo apt-get install libgtk-3-dev
- 多线程问题。在多线程代码中使用cv2.imshow()会造成 GUI 阻塞,如果需要在多线程中使用cv2.imshow(),可以将图像数据通过消息队列传递到主线程进行显示。
关于图像显示色彩不对的问题
当使用cv2.imshow()函数显示图像时,如果出现色彩不对的问题,可能是以下原因:
- 图像的颜色通道顺序不对。cv2.imshow()默认的颜色通道顺序是BGR,而有些图像的颜色通道顺序是RGB。可以使用以下代码将颜色通道顺序矫正:
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) # 将RGB图像转换成BGR图像
- 颜色空间的转换问题。使用cv2.cvtColor()可以对颜色空间进行转换,如果转换不正确也会导致色彩不对的问题。
示例代码
示例1:捕获摄像头并显示
import cv2 # 导入OpenCV模块
# 创建视频捕获对象
cap = cv2.VideoCapture(0)
while True:
# 逐帧读取摄像头数据
ret, frame = cap.read()
# 在窗口中显示当前摄像头的画面
cv2.imshow('Camera', frame)
# 检测是否按下Esc键
if cv2.waitKey(1) & 0xFF == 27:
break
# 释放摄像头资源
cap.release()
# 关闭窗口
cv2.destroyAllWindows()
示例2:绘制图像直方图
import cv2 # 导入OpenCV模块
import numpy as np # 导入NumPy模块
# 读取图像
img = cv2.imread('lena.jpg')
# 将图像从 BGR 空间转换到 HSV 空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 计算直方图
hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])
# 显示直方图
cv2.imshow('Histogram', hist)
# 等待按下任意按键
cv2.waitKey(0)
# 关闭窗口
cv2.destroyAllWindows()
结论
在Python中配置和使用OpenCV确实有些坑,但只要掌握了正确的方法,就能轻松应对。希望本文能够帮助到大家,在使用OpenCV的过程中避免遇到一些问题。