opencv|opencv C++入门


文章目录

  • hello world for opencv
  • Mat-基本图像容器
  • 存储方法
【opencv|opencv C++入门】
hello world for opencv 在使用C++编译器时,外部的库文件需要自己添加到工程编译文件索引中。最简单的方式就是使用cmake,主要具有以下的优点:
  1. 在不同系统之间迁移时不要额外的改变,比如ubuntu与windows;
  2. 可以很好地与其他库结合。
下面介绍创建hello world例程,例程代码如下所示:
#include #include #include using namespace cv; int main(int argc, char** argv) {if (argc != 2) { printf("Usage: learn_opencv.out \n"); return -1; } Mat image; image = imread(argv[1], 1); if (!image.data) { printf("No image data!!\n"); return -1; } namedWindow("Show Image", WINDOW_AUTOSIZE); imshow("Show Image", image); waitKey(0); std::cout << "Hello, World!" << std::endl; return 0; }

该程序可以实现读取一张指定的图片,并展示出来。make文件的编写如下:
cmake_minimum_required(VERSION 3.10) project(learn_opencv)set(CMAKE_CXX_STANDARD 11) find_package(OpenCV REQUIRED) add_executable(learn_opencv main.cpp) target_link_libraries(learn_opencv ${OpenCV_LIBS})

编译时,首先需要运行"cmake .“来进行文件的预编译,然后运行"make"指令来实现完整的编译。运行时输入”./learn_opencv /home/mumu/output_5_0.png"即可实现对指定图片的读取和展示。
Mat-基本图像容器 mat是一种基于c++的图像存储容器,主要包含两部分:
  1. 矩阵头,包含矩阵大小,存储方式和地址等;
  2. 指向图像像素的指针;
mat这个数据类型会自动进行内存管理,是相当优异的数据结构。在对mat对象进行copy时,只会copy走文件头和指针。mat的浅复制包括以下的操作:
Mat A, C; A = imread(argv[1], CV_LOAD_IMAGE_COLOR); Mat B(A); //采用复制构造函数 C = A; //等于符号

我们可以采用截取的方式只获取原来数组中的一部分,比如以下的代码:
Mat D (A, Rect(10, 10, 100, 100)); //采用矩形框来截取 Mat E = A(Rang::all(), Range(1,3)); //采用行和列的边界

如果需要对数据进行深拷贝,我们可以采用以下的方式操作:
Mat F = A.clone(); Mat G; A.copyTo(G);

存储方法 我们可以选择存储数据的颜色空间和数据类型。常见的颜色空间包括灰度/RGB(opencv中使用BGR)/HSV等等。

    推荐阅读