通过学习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) 使用 make
和 Makefile
编译:
创建一个 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++ 文件。CXXFLAGS
和LDFLAGS
:这两个变量分别通过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
编译:
在项目目录下创建一个
build
目录并进入:mkdir build cd build
运行
cmake
来生成构建文件:cmake ..
使用
make
编译项目:make
运行生成的可执行文件:
./test1
以上就是使用 make
和 CMake
编译 OpenCV 程序的过程。