imread()读入图,第一个参数,const string&类型的filename,填我们需要载入的图片路径名, 第二个参数,int类型的flags,为载入标识,它指定一个加载图像的颜色类型。

namedWindow()用于创建一个窗口,const string&型的name,即填被用作窗口的标识符的窗口名称,int 类型的flags ,窗口的标识。

imshow()显示一幅图像,第一个参数,const string&类型的winname,填需要显示的窗口标识名称,第二个参数,InputArray 类型的mat,填需要显示的图像。

imwrite()输出图像到文件,第一个参数,const string&类型的filename,填需要写入的文件名就行了,带上后缀,比如,“hehe.jpg”。第二个参数,InputArray类型的img,一般填一个Mat类型的图像数据就行了。第三个参数,const vector&类型的params,表示为特定格式保存的参数编码,它有默认值vector(),所以一般情况下不需要填写。

基本数据结构

1、Mat类---基础图像容器

由两个数据部分组成:矩阵头(包含矩阵尺寸、存储方法、存储地址等信息)和一个指向存储所有像素值的矩阵的指针。

  1. Mat A,C; //创建信息头部分
  2. A = imread("1.jpg",CV_LOAD_IMAGE_COLOR); //为矩阵开辟内存
  3. Mat B(A); //使用拷贝构造函数
  4. C=A;
  5. //ROI
  6. Mat D = (A,Rect(10,10,100,100)); //使用矩形界定
  7. Mat D = A(Range:all(),Range(1,3)); //使用行和列界定

结构:

  • M.data  数据区域的指针
  • M.dims  矩阵维度
  • M.sizes  维度
  • M.elemSize()  每个元素占的字节空间大小,与元素类型相关,如CV_8U
  • M.step[]  用来计算元素地址, M.step[i] 表示所有比i大的维度所占空间大小

2、Vec---模板类,主要用于存储数值向量

  1. //示例
  2. //可用来定义任意类型的向量,uchar、short、int、float、double
  3. Vec<double, 5> Vector; // 定义一个存放5个double型变量的向量
  4. //使用[]访问Vec向量成员
  5. Vector[0]=10010;
  6. //支持运算类型
  7. v1 = v2 + v3
  8. v1 = v2 - v3
  9. v1 = v2 * scale
  10. v1 = scale * v2
  11. v1 = -v2
  12. v1 += v2
  13. v1 == v2, v1 != v2
  14. norm(v1) (euclidean norm)

3、Scalar类---从Vec类引出的模板类,是一个可存放4个元素的向量,主要用于传递和读取图像中的像素值

  1. //定义BGR三个通道的颜色(蓝色、绿色、红色)
  2. cv::Scalar myScalar;
  3. myScalar = cv::Scalar(255,255,255);
  4. //读取彩色图像像素值(三通道)
  5. cv::Mat pImg = cv::imread("1.jpg", 1); //1表示以彩色图像读入
  6. if (!pImg.data)
  7. return 0;
  8. int x = 100, y = 100; //定义点
  9. cv::Scalar pixel = pImg.at<Vec3b>(x, y);//选取位置
  10. cout << "B chanel of pixel is = " << pixel.val[0] << endl;
  11. cout << "G chanel of pixel is = " << pixel.val[1] << endl;
  12. cout << "R chanel of pixel is = " << pixel.val[2] << endl;

4、Point类---用于表示2维坐标(x,y)

  1. //定义图像中的点
  2. cv::Point pt = Point(10, 10);
  3. //二维空间中的点
  4. cv::Point2dcv::Point2d32f(指定为浮点型)
  5. //三维空间中的点
  6. cv::Point3d
  7. //运算类型
  8. pt1 = pt2 + pt3;
  9. pt1 = pt2 - pt3;
  10. pt1 = pt2 * a;
  11. pt1 = a * pt2;
  12. pt1 += pt2;
  13. pt1 -= pt2;
  14. pt1 *= a;
  15. double value = norm(pt); // L2 norm
  16. pt1 == pt2;
  17. pt1 != pt2;

5、Size类---可表示一幅图像或一个矩形的大小。它包含宽、高2个成员:width , height还有一个面积函数area()

  1. //定义
  2. cv::Size size(int w, int h);

6、Rect类---用于定义2维矩形的模板类,可以用来定义图像的ROI区域。

  1. //定义
  2. cv::Rect rect(x, y, width, height);
  3. //选取ROI区域
  4. cv::Mat pImg = imread("1.jpg",1);
  5. cv::Rect rect(80,20,100,100);//(x,y)=(80,20),w=100,height=100
  6. cv::Mat roi = cv::Mat(pImg, rect);
  7. cv::Mat pImgRect = pImg.clone();
  8. cv::rectangle(pImgRect,rect,cv::Scalar(0,255,0),2);
  9. cv::imshow("original image with rectangle",pImgRect);
  10. cv::imshow("roi",roi);
  11. cv::waitKey();

7、RotatedRect类---特殊的矩形。这个类通过中心点,宽度和高度和旋转角度来表示一个旋转的矩形。

  1. /*定义
  2. center:中心点坐标Point2f类型
  3. size:矩形的宽度和高度,Size2f类型
  4. angle:顺时针方向的旋转角度(单位°),float类型
  5. */
  6. RotatedRect(const Point2f& center, const Size2f& size, float angle);
  7. //RotatedRect
  8. cv::Point2f center(100, 100);
  9. cv::Size2f size(100, 50);
  10. float angle = 45;// try 10, 30, 45
  11. RotatedRect rRect(center, size, angle);
  12. cv::Mat image(200, 200, CV_8UC3, cv::Scalar(0));
  13. Point2f vertices[4];
  14. rRect.points(vertices);
  15. for (int i = 0; i < 4; i++)
  16. line(image, vertices[i], vertices[(i + 1) % 4], Scalar(0, 255, 0));
  17. Rect brect = rRect.boundingRect();
  18. rectangle(image, brect, Scalar(255, 0, 0));
  19. imshow("rectangles", image);
  20. waitKey(0);

8、Rang类---表示范围

  1. Mat m(300,300,CV32F);
  2. Mat part = m(Range::all(), Range(20, 200));

opencv学习笔记(三)的更多相关文章

  1. 【opencv学习笔记三】opencv3.4.0数据类型解释

    opencv提供了多种基本数据类型,我们这里分析集中常见的类型.opencv的数据类型定义可以在D:\Program Files\opencv340\opencv\build\include\open ...

  2. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  3. opencv学习笔记(六)直方图比较图片相似度

    opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...

  4. opencv学习笔记(四)投影

    opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: #include <cv.h> #include <highgui.h> using namespace ...

  5. opencv学习笔记(一)IplImage, CvMat, Mat 的关系

    opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...

  6. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

  7. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  8. OpenCV 学习笔记 07 目标检测与识别

    目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...

  9. OpenCV 学习笔记 02 使用opencv处理图像

    1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...

  10. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

随机推荐

  1. File类_常见的方法(获取系统根目录与指定目录的容量)

    获取系统根目录 import java.io.File; public class File_ListRoots { public static void main(String[] args) { ...

  2. 寒假集训——搜索 B - Sudoku

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream&g ...

  3. 【Lucene4.8教程之中的一个】使用Lucene4.8进行索引及搜索的基本操作

    版权声明:本文为博主原创文章.转载请注明来自http://blog.csdn.net/jediael_lu/ https://blog.csdn.net/jediael_lu/article/deta ...

  4. 转://tcpdump抓包实例

    基本语法 ========过滤主机--------- 抓取所有经过 eth1,目的或源地址是 192.168.1.1 的网络数据# tcpdump -i eth1 host 192.168.1.1- ...

  5. 基于Redis实现一个安全可靠的消息队列

    http://doc.redisfans.com/list/rpoplpush.html

  6. MySQL比like语句更高效写法locate position instr find_in_set

    你是否一直在寻找比MySQL的LIKE语句更高效的方法的,下面我就为你介绍几种. LIKE语句 SELECT `column` FROM `table` where `condition` like  ...

  7. 转载 WebService 的CXF框架 WS方式Spring开发

    WebService 的CXF框架 WS方式Spring开发   1.建项目,导包. 1 <project xmlns="http://maven.apache.org/POM/4.0 ...

  8. IOZONE测试工具使用方法

    iozone介绍: iozone(www.iozone.org)是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能. 可以测试 Read, write, re-read ...

  9. Android学习之基础知识十三 — 四大组件之服务详解第一讲

    一.服务是什么 服务(Service)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使程序被切换到后台, ...

  10. GIT 工作区和暂存区

    工作区和暂存区 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的studygit ...