通过学习opencv图像库编程借助第三方库函数完成一个综合程序设计

发布于:2025-04-09 ⋅ 阅读:(32) ⋅ 点赞:(0)

通过学习opencv图像库编程借助第三方库函数完成一个综合程序设计

1) 编译命令解释:

编译命令:

gcc test1.cpp -o test1 `pkg-config --cflags --libs opencv`

这条命令包含了以下部分:

  • gcc test1.cpp -o test1:
    • gcc 是 GNU 编译器集合(GCC)中的 C 编译器,用于编译 C++ 源代码文件(如 test1.cpp)。
    • -o test1 选项指定了输出的可执行文件名为 test1
  • pkg-config --cflags --libs opencv:
    • 这是一个命令替换部分,pkg-config 是一个用于获取已安装的库的编译和链接信息的工具。通过 pkg-config,你可以获取与 OpenCV 相关的编译和链接参数。
    • --cflags: 返回编译时需要的标志(例如,包含 OpenCV 头文件的路径)。
    • --libs: 返回链接时需要的标志(例如,链接 OpenCV 库的路径和需要链接的库)。

因此,pkg-config --cflags --libs opencv 会返回类似以下内容的路径和标志:

-I/usr/include/opencv4   # 头文件路径
-L/usr/lib/x86_64-linux-gnu -lopencv_core -lopencv_imgproc -lopencv_highgui   # 链接的库路径和库文件

编译命令会将这些路径和标志添加到 GCC 命令中,确保程序能够找到 OpenCV 的头文件和库文件。

2) 使用 makeMakefile 编译:

创建一个 Makefile 文件,进行编译,并添加 clean 选项来清理生成的文件。

# 变量定义
CXX = g++
CXXFLAGS = `pkg-config --cflags opencv4`
LDFLAGS = `pkg-config --libs opencv4`
SRC = test1.cpp
OUT = test1

# 默认目标
all: $(OUT)

# 链接规则
$(OUT): $(SRC)
	$(CXX) $(SRC) -o $(OUT) $(CXXFLAGS) $(LDFLAGS)

# 清理目标
clean:
	rm -f $(OUT)

解释:

  • CXX:指定编译器,使用 g++ 来编译 C++ 文件。
  • CXXFLAGSLDFLAGS:这两个变量分别通过 pkg-config 获取 OpenCV 所需的编译标志和链接标志。
  • SRC:源代码文件 test1.cpp
  • OUT:最终生成的可执行文件名称 test1

使用 make 命令:

make

这将根据 Makefile 中的规则进行编译,并生成 test1 可执行文件。

清理编译文件:

make clean

这将删除生成的 test1 可执行文件。

3) 使用 CMake 进行编译:

CMake 中,我们通常会编写一个 CMakeLists.txt 文件来配置项目。

创建 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.10)
project(OpenCVTest)

# 查找 OpenCV 包
find_package(OpenCV REQUIRED)

# 添加可执行文件
add_executable(test1 test1.cpp)

# 链接 OpenCV 库
target_link_libraries(test1 ${OpenCV_LIBS})

解释:

  • find_package(OpenCV REQUIRED):寻找并加载 OpenCV 包。
  • add_executable(test1 test1.cpp):指定要生成的可执行文件及其源代码文件。
  • target_link_libraries(test1 ${OpenCV_LIBS}):将 OpenCV 库链接到生成的可执行文件。

使用 CMake 编译:

  1. 在项目目录下创建一个 build 目录并进入:

    mkdir build
    cd build
    
  2. 运行 cmake 来生成构建文件:

    cmake ..
    
  3. 使用 make 编译项目:

    make
    
  4. 运行生成的可执行文件:

    ./test1
    

以上就是使用 makeCMake 编译 OpenCV 程序的过程。