opencv的threshold函数,opencv概述

  opencv的threshold函数,opencv概述

  1.为什么要推出Mat图像容器?

  从计算机的角度来看,一幅图像对应一个矩阵,矩阵中包含了所有像素的亮度值。通过获取和存储这些像素值,计算机图像处理可以简化为描述数值矩阵和矩阵信息的处理。OpenCV如何保存图像?

  2001年OpenCV刚出来的时候,是基于C语言接口搭建的。为了在内存中存储图像,当时采用了一种名为IplImage的C语言结构。这种方法的最大缺点是用户必须手动管理内存。代码越大,越麻烦,越容易出错。OpenCV 2.0引入了一个新的C接口,并通过使用自动内存管理提供了一个解决方案。

  2.MAT简介

  作为一个类,Mat有两个部分:矩阵头和指向像素矩阵的指针。

  数据部分

  解释

  矩阵磁头

  描述像素矩阵,主要包括矩阵的大小,存储方式,存储地址。矩阵喷嘴的尺寸是固定的。

  矩阵指针

  矩阵指针指向的对象代表图像本身,其大小因图像而异。由于像素矩阵通常比矩阵开头大几个数量级,复制图像会增加计算量。

  2.1赋值和复制构造函数只复制头。

  为了避免复制图像的巨大计算量,OpenCV采用了引用计数机制。也就是说,每个Mat对象都有自己的矩阵标题,但可以共享同一个图像矩阵。也就是Mat对象的矩阵指针指向同一个地址。在Mat对象赋值和复制构造函数中,只复制矩阵头和指针,而不复制矩阵本身,可以大大减少计算量。

  因此,同一个图像矩阵可能属于多个Mat对象。那么,如果不需要图像矩阵,由哪个Mat对象负责清理呢?Mat和C语法中的智能指针一样,规定矩阵的最后一个对象负责清理。这是根据基准表的参考计数确定的。如果引用计数为0,矩阵将被清除。

  mat A;//A的引用计数为0

  a=im read(e:/code/CPP/opencv/pictures/1。BMP)、CV _ LOAD _ IMAGE _ COLOR);

  matb(a;//a的引用计数是1,2

  mat C=A;//a的引用计数是1,3

  cout ref count ofa:“* a . ref count endl;

  matd=im read(e:/code/CPP/opencv/pictures/1。BMP)、CV _ LOAD _ IMAGE _ COLOR);

  c=D;//C,D指向同一个矩阵,A-1,2的引用计数

  cout ref count ofa:“* a . ref count endl;

  cout ref count of d:“* d . ref count endl;

  执行结果:

  2.2通过克隆复制图像矩阵(或复制到)

  那么,有必要复制矩阵本身吗?可以使用Mat的成员函数clone(或copyTo)。

  马体m1=im read(e:/code/CPP/opencv/pictures/1。BMP),

  CV _加载_图像_颜色;

  mat im2=im1 . clone(;//复制矩阵内容

  Mat im3

  1.复制到(im3;//复制矩阵内容

  在上面的代码中,im1、im2和im3不共享基矩阵,所以引用数为1。

  使用垫子

  3.1mat创建

  由构造函数创建:

  matm (2,2,CV_8UC3,标量)0,0,255);

  cout M= endl M endl

  上面的程序创建了一个2X2像素的图像。每个像素有三个通道。CV_8UC3用8位无符号通道表示3个通道,也就是用标量初始化。值得注意的是,Mat通道的顺序是BGR,而不是众所周知的RGB。由于OpenCV也重载了运算符,Mat对象可以直接作为标准输出输出,执行结果如下:

  在Create()中创建:

  mat M;

  //create不能是初始值。Cv_8UC(4)是用户定义的通道数

  m.create (2,2,CV _ 8UC(4)4);

  cout M= endl M endl

  执行结果:

  如您所见,create无法设置初始值,默认情况下,元素被初始化为205。也可以用cv_8UC(n)自定义n维通道。

  静态函数zeros()、one()、eyes())。

  静态函数

  解释

  零() )

  零矩阵

  ones()).

  1个完整矩阵

  眼睛() )

  单位矩阵

  3.2格式输出

  OpenCV支持多种输出方式,包括默认方式、Python格式、CSV格式、Numpy格式和C语言格式。

  matm (2,3,CV _ 8uc 3);

  杜然(m,标量:3360all(0),标量:3360 all)255);

  “cout”默认格式:“endl”m

  cout python格式: endl 格式(m, python )endl;

  Cout CSV格式3360 endl 格式(m, CSV )endl;

  cout numpy format: endl format(m, numpy))endl;

  Cou c格式: endl 格式(m, c )endl;

  执行结果:

  其中杜然)被随机分配给m的元素,指定范围为0-255。

opencv的threshold函数,opencv概述