Linux系统如何安装配置OpenCV并实现基础图像处理操作?

在Linux系统中使用OpenCV是进行计算机视觉和图像处理的常见需求,OpenCV(Open Source Computer Vision Library)提供了丰富的函数库,支持C++、Python等多种编程语言,本文将从安装、配置、基本使用到高级应用,详细说明Linux环境下OpenCV的使用方法。

linux如何使用opencv

安装OpenCV

Linux下安装OpenCV有三种主要方式:系统包管理器安装、源码编译安装、pip安装(Python环境),不同方式适用于不同需求,系统包管理器安装最简单,但版本可能较旧;源码编译可定制功能,但过程复杂;pip安装适合Python开发者,版本较新。

系统包管理器安装

以Ubuntu/Debian为例,使用apt命令:

sudo apt update
sudo apt install libopencv-dev python3-opencv

以CentOS/RHEL为例,使用yum命令:

sudo yum install opencv opencv-devel python3-opencv

优点:快速安装,自动处理依赖;缺点:版本可能滞后(如Ubuntu 20.04默认OpenCV 4.2)。

源码编译安装

适用于需要最新版本或自定义功能的情况,步骤如下:

  • 安装依赖:
    sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
  • 下载源码:
    git clone https://github.com/opencv/opencv.git
    cd opencv
    git checkout <版本号>  # 如4.8.0
  • 编译安装:
    mkdir build && cd build
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
    make -j$(nproc)
    sudo make install

pip安装(Python环境)

若仅需Python支持,可直接安装opencv-python:

linux如何使用opencv

pip install opencv-python

或包含扩展模块的opencv-python-headless(无GUI依赖):

pip install opencv-python-headless

不同Linux发行版安装命令对比
| 发行版 | 包管理器 | 安装命令(C++库) | 安装命令(Python库) |
|————–|———-|————————|————————–|
| Ubuntu/Debian | apt | sudo apt install libopencv-dev | sudo apt install python3-opencv |
| CentOS/RHEL | yum | sudo yum install opencv-devel | sudo yum install python3-opencv |
| Fedora | dnf | sudo dnf install opencv-devel | sudo dnf install python3-opencv |
| 通用(Python)| pip | – | pip install opencv-python |

配置环境变量

源码编译安装后,需配置LD_LIBRARY_PATH以动态链接OpenCV库:

echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

验证安装:

  • C++:运行pkg-config --modversion opencv4,显示版本号则成功。
  • Python:运行python3 -c "import cv2; print(cv2.__version__)",显示版本号则成功。

基本使用示例

C++示例:读取并显示图片

#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
    Mat image = imread("test.jpg", IMREAD_COLOR); // 读取图片
    if (image.empty()) {
        std::cerr << "Could not read image!" << std::endl;
        return -1;
    }
    imshow("Display Window", image); // 显示图片
    waitKey(0); // 等待按键
    return 0;
}

编译(需链接OpenCV库):

g++ -std=c++11 display_img.cpp -o display_img `pkg-config --cflags --libs opencv4`
./display_img

Python示例:图像灰度化

import cv2
# 读取图片
image = cv2.imread("test.jpg")
if image is None:
    print("Could not read image!")
    exit()
# 转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 显示图片
cv2.imshow("Gray Image", gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

高级应用

视频处理

  • 读取摄像头
    cap = cv2.VideoCapture(0) # 0为默认摄像头
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        cv2.imshow("Camera", frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()

图像处理

边缘检测(Canny算子):

linux如何使用opencv

import cv2
import numpy as np
image = cv2.imread("test.jpg", cv2.IMREAD_GRAYSCALE)
edges = cv2.Canny(image, 100, 200)
cv2.imshow("Edges", edges)
cv2.waitKey(0)

DNN模块加载预训练模型

net = cv2.dnn.readNet("model.onnx") # 加载ONNX格式模型
blob = cv2.dnn.blobFromImage(image, scalefactor=1/255.0, size=(224, 224), mean=(0,0,0), swapRB=True)
net.setInput(blob)
output = net.forward()

常见问题与解决(FAQs)

Q1:Linux下OpenCV编译时报错“undefined reference to cv::imread”怎么办?
A:通常是由于链接库缺失导致,确保编译时正确链接OpenCV库:

  • 使用CMakeLists.txt(推荐):
    find_package(OpenCV REQUIRED)
    target_link_libraries(your_target ${OpenCV_LIBS})
  • 或手动指定库路径:
    g++ your_file.cpp -o your_app -I/usr/local/include/opencv4 -L/usr/local/lib -lopencv_core -lopencv_highgui

Q2:如何在Python中使用OpenCV处理视频并保存为MP4文件?
A:使用cv2.VideoCapture读取视频,cv2.VideoWriter保存,需设置编码格式(如MP4V)和帧率:

import cv2
cap = cv2.VideoCapture("input.mp4")
fps = cap.get(cv2.CAP_PROP_FPS)
frame_size = (int(cap.get(3)), int(cap.get(4)))
# 初始化VideoWriter(MP4编码需支持,如MP4V)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter("output.mp4", fourcc, fps, frame_size)
while True:
    ret, frame = cap.read()
    if not ret:
        break
    # 处理帧(如灰度化)
    processed_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    out.write(processed_frame)
cap.release()
out.release()

通过以上步骤,可在Linux系统中完成OpenCV的安装、配置及基础应用,并根据需求扩展至复杂的计算机视觉任务。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/16421.html

(0)
酷番叔酷番叔
上一篇 2025年8月25日 02:06
下一篇 2025年8月25日 02:21

相关推荐

  • Linux无法读写U盘?,Linux U盘识别失败怎么办?,Linux挂载U盘权限错误?

    检测U盘是否被识别物理连接插入U盘后,观察指示灯(如有),系统通常发出提示音(需启用声音提示),终端检测打开终端(Ctrl+Alt+T),执行命令:lsblk # 列出所有块设备(含U盘)dmesg | tail # 查看内核日志末尾的U盘识别记录输出示例: sdb 8:16 1 14.9G 0 disk└─s……

    2025年7月29日
    10800
  • Linux中如何添加GC日志配置与查看?

    在Linux系统中,为Java应用添加垃圾回收(GC)日志是监控JVM内存管理、排查性能问题的重要手段,GC日志详细记录了GC的发生时间、停顿时长、回收内存大小等关键信息,有助于开发者优化JVM参数、定位内存泄漏或频繁Full GC等问题,以下从基础参数、不同GC类型配置、日志管理及分析工具等方面,详细说明Li……

    2025年10月8日
    11500
  • Linux下如何打开CHM文件?

    在Linux操作系统中,由于CHM(Compiled HTML Help)文件是微软开发的专有格式,主要用于Windows系统的帮助文档,Linux原生并不直接支持打开这类文件,通过第三方工具和软件包,用户可以在Linux环境下顺利查看和使用CHM文件,本文将详细介绍几种主流的CHM文件打开方法,涵盖图形界面工……

    2025年8月28日
    21500
  • Linux下如何使用GDB调试程序?

    在Linux系统中,GDB(GNU Debugger)是功能强大的调试工具,主要用于调试C、C++、Go等语言编写的程序,通过GDB,开发者可以控制程序执行、设置断点、查看变量值、分析内存状态等,从而快速定位程序中的bug,以下将详细介绍GDB的使用方法,从安装到高级功能,帮助开发者掌握这一工具,安装GDB在使……

    2025年9月18日
    13300
  • XP系统如何进行Linux分区?操作步骤详解

    在Windows XP系统下为Linux进行分区,需要兼顾XP系统的兼容性和Linux的分区需求,整个过程涉及数据备份、分区工具选择、分区类型规划、空间分配及引导配置等关键步骤,以下是详细操作指南,帮助用户顺利完成双系统环境下的Linux分区,准备工作:数据备份与工具准备数据备份(核心前提)XP系统较老旧,分区……

    2025年8月23日
    13100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信