一、Opencv的命名空间
Opencv中的c++类和函数都是定义在命名空间cv中的,有两种方法访问:
- 在代码开头加上以下这句;
using namespace cv
- 在用到opencv类和函数的时候,前面加上cv::,比较不方便,推荐第一种。
开头一般可写成:
#include<iostream> #include<opencv2/opencv.hpp> using namespace cv; using namespace std;
二、Mat类的使用
Mat类是用于保存图像以及其他矩阵数据的数据结构。
Mat A, B, E; //Mat仅创建信息头,并未开辟空间
A = imread("lena.jpg", CV_LOAD_IMAGE_COLOR); //将矩阵首地址赋予对象A
Mat C(A); //浅复制,将对象A的信息头和矩阵指针复制给C
C = A; //另一种浅复制,不同对象访问相同数据
Mat D = A.clone(); //深复制,复制包括矩阵数据
A.copyTo(E); //深复制的另一种形式
Mat F(A, Rect(10, 10, 100, 100)); //创建感兴趣区域ROI,使用矩形界定边界
Mat grayImg(A.rows, A.cols, CV_8UC1, Scalar(255)); //创建一高和宽一致的8位无符号单通道的灰度图片容器,并且初始化图片为白色255
- CV_LOAD_IMAGE_COLOR 如果取这个标识的话,总是转换图像到彩色一体;
- CV_LOAD_IMAGE_GRAYSCALE 如果取这个标识的话,始终将图像转换成灰度1;
- CV_LOAD_IMAGE_ANYDEPTH 如果取这个标识的话,若载入的图像的深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回;
- CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYCOLOR 如果输入有冲突的标志,将采用较小的数字值;
- CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR 如果想要载入最真实的图像。
关于8bite, 16bites, 32bites, 64bites举个例子
如果你现在创建了一个存储--灰度图片的Mat对象, 这个图像的大小为宽100, 高100, 那么, 现在这张
灰度图片中有10000个像素点,它每一个像素点在内存空间所占的空间大小是8bite, 8位--所以它对
应的就是CV_8;
S--代表--- signed int-- - 有符号整形
U--代表--- unsigned int--无符号整形
F--代表--- float-------- - 单精度浮点型
1--灰度图片--- 是单通道图像
2--RGB彩色图像--- 是3通道图像
3--带Alph通道的RGB图像---是4通道图像
- flags >0返回一个3通道的彩色图像。
- flags =0返回灰度图像。
- flags <0返回包含Alpha通道的加载的图像。