第一章 Ubuntu22下OpenCV4.6.0+contrib模块编译安装
第二章 ubuntu22下C++ kdevelop环境搭建:OpenCV示例
第三章 C++下OPENCV驱动调用海康GigE工业相机
在上一篇文章中笔者详细介绍了ubuntu22系统下opencv的编译和安装,本文将介绍ubuntu系统下C++开发环境的搭建。
以及以opencv代码为示例展示一个完整的开发流程。
本文涉及代码地址:https://gitee.com/C-Qiyao/cv_demo
KDevelop是一款功能强大的集成开发环境应用程序,支持多种不同语言,其中包括C、C++、Perl、Python、PHP、Java、Fortran、Ruby、Ada、Pascal、SQL、GO和Bash脚本。支持的构建系统包括GNU(automake)、cmake、qmake和自定义项目的make以及不需要Makefile的脚本项目。
安装代码如下:
$ sudo apt-get update
$ sudo apt-get install kdevelop
根据需要创建所需要的模板,笔者在此展示一个终端demo所以选择standard->Terminal类型,选择cmake生成。
可以选择版本控制系统
正常情况下IDE会自动为你生成以下文件以及目录:
如果我们此刻在main.cpp文件内直接include opencv的化会出现找不到路径的情况
KDevelop开发不像在windows下的VisualStudio一样可以在工程参数内设置include path以及附加库目录,对此我们需要编辑CMakeList来添加我们所需要的文件。
在此笔者以OpenCV库导入为例,当前原有的CMakeList内容如下
cmake_minimum_required(VERSION 3.0)
project(cv_demo)
add_executable(cv_demo main.cpp)
install(TARGETS cv_demo RUNTIME DESTINATION bin)
我们如果需要使用opencv库,则需要修改对应的CMakeList,笔者按照自己的习惯提供带有OPENCV的cmakelist,改写CMakeList成如下形式:
# cmake needs this line
cmake_minimum_required(VERSION 3.0)
# 声明cmake要求的最低版本
set(PROJECT_NAME "cv_demo")
# 设置PROJECT_NAME的值,方便批量修改工程名
set(CMAKE_BUILD_TYPE "Release")
# 设置编译类型
project(${PROJECT_NAME})
# 引用PROJECT_NAME,设置工程名
find_package(OpenCV REQUIRED)
# 搜索OpenCV库
include_directories(${OpenCV_INCLUDE_DIRS})
# 添加opencv路径
message(STATUS "OpenCV library status:")
message(STATUS " config: ${OpenCV_DIR}")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " libraries: ${OpenCV_LIBS}")
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
# 输出一些信息
add_compile_options(-std=c++11)
# 设置C++版本为C++11
add_executable(${PROJECT_NAME} main.cpp)
# 设置可执行文件对于的主函数所在文件(main函数所在文件)
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS} )
# 链接主函数和opencv库
在kdevelop下保存该文件的修改会自动进行cmake,得到以下内容configure完毕。
此时打开main.cpp 发现波浪线消失,成功include opencv库
笔者直接在main.cpp同级目录下新建一个cv_test.cpp文件,内部实现opencv的摄像机打开和视屏的展示相关函数。
main.cpp如下所示:
#include
#include "cv_test.cpp"
using namespace std;
int main(int argc, char **argv) {
camera cam(0);
cout << "get one pic" << std::endl;
cam.cap_one_pic();
cam.show_one_pic();
return 0;
}
cv_test.cpp如下所示:
#include
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include
using namespace std;
using namespace cv;
class camera{
public:
void cap_one_pic();
void show_one_pic();
camera(int input);
private:
Mat pic;
int i;
VideoCapture cap;
};
camera::camera(int input)
{
cap.open(input);
}
void camera::cap_one_pic()
{
cap.read(pic);
}
void camera::show_one_pic()
{
imshow("test1",pic);
cout << "image:" << pic.rows << "," << pic.cols << endl;
int key=waitKey(0);
}
可以将cv_test.cpp编译成动态链接库(windows下为.dll ,linux下为.so),在此仅供参考思路
修改cmakelist,添加以下语句:
add_library(cv_test SHARED cv_test.cpp)
# SHARED表示生成动态链接库cv_test
target_link_libraries(${PROJECT_NAME} cv_test )
#将cv_test链接至主程序
保存cmakelist之后执行构建(make)指令,在build文件夹得到以下内容
qiyao@qiyao-Legion-Y9000X-IAH7:~/projects/cv_demo/build$ ls
build.ninja CMakeFiles compile_commands.json libcv_test.so
CMakeCache.txt cmake_install.cmake cv_demo
可以发现cv_test.cpp被编译为了libcv_test.so,在终端内执行cv_demo
$ ./cv_demo
#输出
#get one pic
#image:480,640
输出图像运行结果
以上就是本文的主要内容,本文仅仅简单介绍了笔者自己在linux下的C++编程流程,也简单记录了自己编写cmakelist的记录,也向以此为从windows下Visualstudio等编程环境转向linux编程的读者提供一点点自己的经验,方便初学者入门。