Opencv学习笔记(一)

一、Opencv的命名空间

Opencv中的c++类和函数都是定义在命名空间cv中的,有两种方法访问:

  1. 在代码开头加上以下这句;
    using namespace cv
  2. 在用到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通道的加载的图像。


























猜你喜欢

转载自blog.csdn.net/xyu66/article/details/79922019
今日推荐