文章目录
- hello world for opencv
- Mat-基本图像容器
- 存储方法
hello world for opencv 在使用C++编译器时,外部的库文件需要自己添加到工程编译文件索引中。最简单的方式就是使用cmake,主要具有以下的优点:
- 在不同系统之间迁移时不要额外的改变,比如ubuntu与windows;
- 可以很好地与其他库结合。
#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++的图像存储容器,主要包含两部分:
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等等。
推荐阅读
- opencv|python-opencv 图像处理基础 (十)图像膨胀腐蚀+开闭操作+顶帽黑帽+形态学梯度
- 计算机视觉|opencv-python 机器视觉(宽度测量)
- opencv|python-opencv 图像处理基础 (二)高斯噪声+椒盐噪声+滤波
- OpenCV|OpenCV-图像处理(18、Laplance算子)
- 计算机视觉|模板匹配与像素统计
- C++|OpenCV 离散傅里叶变换在图像处理中的应用学习笔记
- 计算机视觉|傅里叶变换在图像处理中的应用
- opencv学习|opencv3双目视觉中的立体校正原理
- 计算机视觉教程|计算机视觉教程6-1(图解双目视觉系统与立体校正原理)