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。