Cmake编译c++程序,调用了opencv以及运行程序

这篇博客介绍了如何在Linux环境下使用CMake编译C++程序,以调用OpenCV库操作摄像头。文章详细阐述了创建CMakeLists.txt文件的过程,包括设置编译选项、链接OpenCV库,并提供了程序源代码示例。在运行程序后,还讨论了如何通过transpose()和flip()函数调整摄像头视角。
摘要由CSDN通过智能技术生成

Cmake编译c++程序,调用了opencv以及运行程序

最近接触了因项目需要开始接触ARM,需要用cmake编译c++程序调用摄像头,因为以前没有用过arm环境及cmake编译所以走了不少弯路,在此结合过程中查找的资料记录一下遇到的问题及解决方法。

当在linux系统下编写程序时,因为没有windows下类似于vs code的那种集成开发环境。所以不能想windows下一样一键编译运行。

一种方法是编写makefile文件,用它管理程序脚本之间的依赖关系。但是这个方法比较麻烦。目前常用的方法是利用cmake工具生成makefile文件。

想要使用cmake文件需要在工程的每个文件夹中都编写CMakeLists.txt文件。

首先建立一个名为camera的文件夹,在其中建立程序源文件main.cpp和CMakeLists.txt这里由于要调用摄像头,因此需要链接opencv

#main.cpp
#include<opencv2/opencv.hpp>
using namespace cv;
 
int main(){
    VideoCapture cap;
    cap.open(1); //打开摄像头,序列号是/dev/videoi,i是0,1,2,cap.open(i)
 
    if(!cap.isOpened())
        return -1;
 
    Mat frame;
    while(1)
    {
        cap>>frame;//等价于cap.read(frame);
        //Canny(frame, frame, 30, 100);//canny边缘检测,去掉这一行就是纯粹的读取摄像头了
        //cvtColor(frame, frame, CV_BGR2HSV);//BGR空间转为HSV颜色空间,注意,两者不能同时对同一张图片(在此为frame)进行处理,否则报错
        if(frame.empty())
            break;
        imshow("video", frame);
        if(waitKey(20)>0)//按下任意键退出摄像头  因电脑环境而异,有的电脑可能会出现一闪而过的情况
            break;
    }
    cap.release();
    destroyAllWindows();//关闭所有窗口
    return 0;
}
# CMakeLists.txt
# 声明要求的 cmake 最低版本
cmake_minimum_required( VERSION 2.8 )

# 声明一个 cmake 工程 工程名为 pro
project( pro )

# 设置编译模式
set( CMAKE_BUILD_TYPE "Debug" )

#添加OPENCV库
#指定OpenCV版本,代码如下
#find_package(OpenCV 3.3 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
find_package(OpenCV REQUIRED)

#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})

#显示OpenCV_INCLUDE_DIRS的值
message(${OpenCV_INCLUDE_DIRS})

# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( camera main.cpp )

# 将库文件链接到可执行程序上
# 生成名为lesson2的可执行程序
target_link_libraries( camera  ${OpenCV_LIBS})

CMakeLists.txt代码部分解释:

find_package(OpenCV REQUIRED)会在Ubuntu系统下找到OpenCVConfig.cmake,该文件定义了OpenCV_INCLUDE_DIRSOpenCV_LIBS等变量,因而可以使用include_directoriestarget_link_libraries来访问这两个变量

可以通过terminal输入locate OpenCVConfig.cmake来找到这个.cmake文件,用以确认系统确实安装了OpenCV

然后在terminal下,将路径改为当前文件夹,先后执行

$cmake .

$make

在此时的文件夹中生成camera文件,camera文件时编译之后的输出文件

$./camera

可以看到输出结果

在运行之后发现图像角度不对,因此调用

transpose();

flip();

旋转摄像头

使用方法:

flip(mat, mat, int)

第三个参数:1 左右翻

​ 0上下翻

​ -1对角翻

通过使用flip可以达到旋转90°,180°,270°的效果

transpose()是转置,效果是翻转+右旋90°

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值