Linux中使用Cmake编译工程

Linux中使用Cmake编译工程:

 

1. 创建工程目录

        在/home下面创建了一个工程文件夹,在文件夹中创建三个目录 images、out、src 分别用来存放 需要处理和保存的图像,编译输出的可执行文件,

工程源码。

         进入src目录中,创建两个目录 include、source,和CMakeLists.txt 文件。其中source用来存放程序的源文件,include用于存放头文件。

  整个工程的目录结构如下:

2 编写及编译代码

使用VScode打开opencv文件夹
在source目录中创建 main.cpp 文件 ColChange.cpp 文件,在include目录中创建 ColChange.h文件。个文件的源码如下:

main.cpp

 1 #include <stdio.h>
 2 #include <opencv2/opencv.hpp>
 3 #include "ColChange.h"
 4 
 5 //using namespace cv;
 6 using namespace std;
 7 
 8 
 9 int main(int argc, char** argv )
10 {
11   //读取图片,将图片存为Mat类的image实例中
12   Mat image = imread("../images/123.jpg");
13 
14   if(image.empty()){
15     printf("could not load image...\n");
16     return -1;
17   }
18   //实例化一个QuickDemo
19   QuickDemo qd;
20 
21   //qd.colorSpace_Demo(image);
22   //qd.mat_creat_demo(image);
23   qd.pixel_visit_demo(image);
24 
25   //创建窗口SSJ
26   //cv::namedWindow("SSJ",WINDOW_FREERATIO);
27 
28   //在SSJ窗口上,显示图片
29   //cv::imshow("SSJ", image);
30   //显示状态阻塞
31   cv::waitKey(0);
32 
33   return 0;
34 }

ColChange.cpp

 

 1 #include "ColChange.h"
 2 
 3 /*
 4  * Author:SSJ-xiaoguoke
 5  * Funtion:转换图像的色彩空间,transform the color space of the image
 6  */
 7 void QuickDemo::colorSpace_Demo(Mat &image)
 8 {
 9   Mat gray,hsv;
10  
11   cvtColor(image,hsv,COLOR_BGR2HSV);
12   cvtColor(image, gray,COLOR_BGR2GRAY);
13 
14   imshow("HSV",hsv);
15   imshow("huidu",gray);
16 
17   imwrite("../images/hsv.jpg",hsv);
18   imwrite("../images/gray.jpg",gray);
19 
20 }
21 
22 /*
23  * Author:SSJ-xiaoguoke
24  * Funtion:创建Mat对象,Creating an image object
25  */
26 void QuickDemo::mat_creat_demo(Mat &image)
27 {
28     Mat m1,m2;
29 
30     m1 = image.clone();
31     image.copyTo(m2);
32 
33 /*
34  * Size(8,8):创建的矩阵尺寸为 8*8
35  * CV_8UC1:8位 U:无符号unsigned C:char型 1:单通道
36  */
37     //Mat m3 = Mat::zeros(Size(8,8),CV_8UC1);
38     /*三通道*/
39     Mat m3 = Mat::zeros(Size(500,500),CV_8UC3);
40     /*创建一个值全是1的矩阵*/
41     //Mat m3 = Mat::ones(Size(8,8),CV_8UC1);
42 
43     m3 = Scalar(0,0,255);
44     //std::cout << m3 << std::endl;
45 
46     imshow("red",m3);
47 
48 }
49 
50 /*
51  * Author:SSJ-xiaoguoke
52  * Funtion:像素操作,Pixel operations
53  */
54 void QuickDemo::pixel_visit_demo(Mat &image)
55 {
56     int W = image.cols;
57     int h = image.rows;
58     int dims = image.channels();
59 
60     /*for(int row=0; row < h; row++){
61         for(int col=0; col<W; col++){
62             if(dims==1){
63 
64                 int pv = image.at<uchar>(row,col);
65                 image.at<uchar>(row,col) = 255 - pv;
66 
67             }
68             if(dims==3){
69 
70                 Vec3b bgr = image.at<Vec3b>(row,col);
71                 image.at<Vec3b>(row,col)[0] = 255 - bgr[0];
72                 image.at<Vec3b>(row,col)[1] = 255 - bgr[1];
73                 image.at<Vec3b>(row,col)[2] = 255 - bgr[2];
74 
75             }
76         }
77     }*/
78     /*通过指针的方法实现*/
79     for(int row=0;row < h; row++){
80 
81         uchar* current_row = image.ptr<uchar>(row);
82 
83         for(int col=0;col < W;col++){
84             if(dims==1){
85                 int pv = *current_row;
86                 *current_row++ = 255-pv;
87 
88             }
89             if(dims==3){
90                 *current_row++ = 255 - *current_row;
91                 *current_row++ = 255 - *current_row;
92                 *current_row++ = 255 - *current_row;
93             }
94         }
95     }
96 
97     imshow("Pixel operations",image);
98 
99 }

ColChange.h

 

 1 #include <opencv2/opencv.hpp>
 2 
 3 using namespace cv;
 4 using namespace std;
 5 
 6 class QuickDemo {
 7     public:
 8         void colorSpace_Demo(Mat &image);
 9 
10         void mat_creat_demo(Mat &image);
11 
12         void pixel_visit_demo(Mat &image);
13 
14 };

 

CMakeLists.txt

 

 1 #可执行文件名
 2 project(test)
 3 #设置可执行程序的输出路径
 4 set(EXECUTABLE_OUTPUT_PATH ../out/)
 5 #设置源码路径
 6 set(SOURCES
 7     ./source/main.cpp
 8     ./source/ColChange.cpp     
 9 )
10 #添加头文件搜索路径
11 include_directories(./include)
12 #查找包
13 find_package(OpenCV 3 REQUIRED )
14 #添加编译的可执行文件
15 add_executable(test ${SOURCES})
16 #链接可执行文件
17 target_link_libraries(test ${OpenCV_LIBS})

 

代码编写完成之后,进入src目录中,执行指令编译工程

1 cmake ./
2 make

编译完成之后会在out目录下输出一个叫 test的可执行文件。在image下面放一张图片 改名为123.jpg(可以修改代码来修改加载的图片名字)
进入out目录

./test

 

posted @ 2023-08-01 10:23  量子与太极  阅读(688)  评论(0编辑  收藏  举报