以下是使用CMake构建OpenCV项目的完整攻略:
一、安装OpenCV
方式一:使用包管理器
如果你的操作系统提供了OpenCV的官方包,可以直接使用包管理器进行安装。
- Ubuntu:
sudo apt install libopencv-dev
- CentOS:
sudo yum install opencv-devel
方式二:源码安装
如果没有官方包或者需要特定版本的OpenCV,则需要从源码进行安装。
- 在OpenCV官网下载所需版本的源代码压缩包。
- 解压缩源码包,并进入到解压缩后的文件夹,在终端中执行以下命令:
mkdir build
cd build
cmake ..
make
sudo make install
二、使用CMake构建OpenCV项目
1. 新建项目并创建CMakeLists.txt
在工作目录下新建一个项目文件夹,同时在该文件夹下创建一个CMakeLists.txt
文件。
mkdir my_project
cd my_project
touch CMakeLists.txt
2. 添加OpenCV依赖
在CMakeLists.txt
文件中添加如下内容,告诉CMake链接OpenCV库。
cmake_minimum_required(VERSION 3.0)
project(my_project)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_LIB_DIRS})
add_executable(my_executable main.cpp)
target_link_libraries(my_executable ${OpenCV_LIBS})
3. 编写OpenCV代码
在项目文件夹下新建main.cpp
文件,并编写OpenCV代码,以下是一个简单的示例(使用OpenCV读取并显示图片):
#include <opencv2/opencv.hpp>
int main(int argc, char** argv)
{
// 加载图片
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_COLOR);
// 判断是否加载成功
if(!image.data)
{
std::cerr << "Failed to read image." << std::endl;
return -1;
}
// 显示图片
cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE);
cv::imshow("Display window", image);
// 等待按键
cv::waitKey(0);
return 0;
}
4. 使用CMake编译项目
在项目文件夹下新建一个build
文件夹,并在该文件夹下使用cmake
命令进行编译。
mkdir build
cd build
cmake ..
make
5. 运行OpenCV应用程序
在终端中进入build
文件夹,运行可执行文件 ./my_executable
即可执行OpenCV程序并查看结果。
三、示例解析
示例一:使用OpenCV处理视频
在main.cpp
中添加以下代码,用于处理视频:
#include <opencv2/opencv.hpp>
int main(int argc, char** argv)
{
// 加载视频
cv::VideoCapture cap(0);
// 判断是否加载成功
if(!cap.isOpened()){
std::cerr << "Failed to open camera." << std::endl;
return -1;
}
// 创建窗口
cv::namedWindow("Video", cv::WINDOW_AUTOSIZE);
while(true){
// 读取视频帧
cv::Mat frame;
cap >> frame;
// 判断视频是否结束
if(frame.empty()){
std::cerr << "Video stream ended." << std::endl;
break;
}
// 处理视频帧
cv::cvtColor(frame, frame, cv::COLOR_BGR2GRAY);
cv::GaussianBlur(frame, frame, cv::Size(7, 7), 1.5);
// 显示视频帧
cv::imshow("Video", frame);
// 等待按键
if(cv::waitKey(33) >= 0) break;
}
return 0;
}
运行./my_executable
即可打开摄像头并在窗口中显示视频流。
示例二:使用OpenCV进行图像识别
在main.cpp
中添加以下代码,用于进行图像识别:
#include <opencv2/opencv.hpp>
int main(int argc, char** argv)
{
// 加载图片
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_COLOR);
// 判断是否加载成功
if(!image.data)
{
std::cerr << "Failed to read image." << std::endl;
return -1;
}
// 加载分类器
cv::CascadeClassifier face_cascade;
if(!face_cascade.load("haarcascade_frontalface_default.xml"))
{
std::cerr << "Failed to load face cascade." << std::endl;
return -1;
}
// 检测人脸
std::vector<cv::Rect> faces;
face_cascade.detectMultiScale(image, faces, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30));
// 绘制人脸检测框
for(int i = 0; i < faces.size(); i++)
{
cv::rectangle(image, faces[i], cv::Scalar(0, 255, 0), 2);
}
// 显示图片
cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE);
cv::imshow("Display window", image);
// 等待按键
cv::waitKey(0);
return 0;
}
运行./my_executable
即可进行图像识别并在窗口中显示结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用CMake构建OpenCV项目过程解析 - Python技术站