浅谈python配置与使用OpenCV踩的一些坑

  • Post category:Python

浅谈python配置与使用OpenCV踩的一些坑

简介

在使用Python配置和使用OpenCV的过程中,可能会遇到很多问题。本文将会分享一些我在配置和使用OpenCV过程中踩到的坑,并提供一些解决方法。

安装OpenCV

在Windows中安装OpenCV

在Windows系统中,安装OpenCV需要执行以下步骤:

  1. 去OpenCV官网(https://opencv.org/)下载对应版本的OpenCV安装程序。要注意选择与自己的Python版本兼容的OpenCV版本。并且,要选择包含OpenCV-contrib模块的版本,这样能得到更完整的OpenCV功能。
  2. 运行安装程序,将OpenCV安装到系统中。安装程序会将OpenCV安装到标准路径:C:\opencv。如果需要将OpenCV安装到其他路径中,可以在安装程序中进行设置。
  3. 将OpenCV添加到系统环境变量中。需要添加的环境变量包括:OPENCV_DIR(OpenCV的安装路径)、OPENCV_BUILD(OpenCV编译文件的路径)、PYTHONPATH(Python模块搜索路径)等。
  4. 在Python中导入OpenCV模块,可以使用以下代码:
import cv2 # 导入OpenCV模块

在Linux中安装OpenCV

在Linux中安装OpenCV也需要进行以下步骤:

  1. 安装C++编译器和其他依赖库。需要使用以下命令安装相关库:
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
  1. 下载OpenCV源码。可以从OpenCV官网下载最新版本的源码,也可以使用以下命令从Github上下载:
git clone https://github.com/opencv/opencv.git
  1. 编译和安装OpenCV。需要进入下载后的OpenCV目录,然后执行以下命令:
mkdir build && cd build
cmake ..
make -j4 # 使用4个CPU核心编译OpenCV
sudo make install
  1. 将OpenCV添加到 Python 的系统路径中。需要在Python中执行以下命令:
import sys
sys.path.append('/usr/local/python/cv2/python-3.6/cv2.so') # 根据实际安装路径修改

OpenCV常见问题

关于cv2.imshow()无反应的问题

当使用cv2.imshow()函数显示图像时,如果没有反应,可能是以下原因:

  1. 缺少GUI后端库。需要安装 GTK3 或者 Qt5 等 GUI 后端库。可以使用以下命令安装 GTK3:
sudo apt-get install libgtk-3-dev
  1. 多线程问题。在多线程代码中使用cv2.imshow()会造成 GUI 阻塞,如果需要在多线程中使用cv2.imshow(),可以将图像数据通过消息队列传递到主线程进行显示。

关于图像显示色彩不对的问题

当使用cv2.imshow()函数显示图像时,如果出现色彩不对的问题,可能是以下原因:

  1. 图像的颜色通道顺序不对。cv2.imshow()默认的颜色通道顺序是BGR,而有些图像的颜色通道顺序是RGB。可以使用以下代码将颜色通道顺序矫正:
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) # 将RGB图像转换成BGR图像
  1. 颜色空间的转换问题。使用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的过程中避免遇到一些问题。