青浦教育平台网站建设,南宁专业网站制作公司,广告制作公司哪家好,网站建设优化经验我们开始图像处理的基本操作的了解一、图像对象本身的加深学习1.1 Mat对象和ROI1.1.1 创建一个明确的Mat对象1.1.2 感兴趣的区域ROI二、图像的灰度处理2.1 概念2.2 cvtColor()函数2.3 示例一、图像对象本身的加深学习
1.1 Mat对象和ROI 这是一个技术经验的浅尝#xff0c;所以…
我们开始图像处理的基本操作的了解一、图像对象本身的加深学习1.1 Mat对象和ROI1.1.1 创建一个明确的Mat对象1.1.2 感兴趣的区域ROI二、图像的灰度处理2.1 概念2.2 cvtColor()函数2.3 示例一、图像对象本身的加深学习
1.1 Mat对象和ROI 这是一个技术经验的浅尝所以不是某个具体的函数而是对前边某部分大家接触过的内容的加深和复习帮助大家更深地进入视觉处理这个领域的学习。
1.1.1 创建一个明确的Mat对象
Mat对象的加深理解 我们有多种方式从现实世界中获取数字图像数码相机扫描仪计算机断层扫描和磁共振成像等等。在任何情况下我们人类看到的都是图像。然而当将其转换为数字设备时我们记录的是图像中每个点的数值。 例如在上述图像中您可以看到汽车的镜像只不过是一个包含像素点所有强度值的矩阵。我们如何获取和存储像素值可能会根据我们的需要而有所不同但最终计算机世界内的所有图像可能会被减少到描述矩阵本身的数字矩阵和其他信息。OpenCV是一个计算机视觉库其主要重点是处理和操纵这些信息。因此您需要熟悉的第一件事是OpenCV如何存储和处理图像。 所以可以简单的理解为图像就是一个n维矩阵。
Mat对象的构造函数的解读 原文Mat对象的多种构造函数原文地址 其中我们常用的构造函数主要有以下几种 1、Mat (int rows, int cols, int type, const Scalar s)
参数解释
//This is an overloaded member function,
//provided for convenience.
//It differs from the above function only in what argument(s) it accepts.
// 这是一个为了更加便捷而提供的重载成员函数
//和上述构造函数的区别仅仅在于所接受的参数个数的不同//Parameters 成员参数
//rows 一个2维数组的行数
//cols 一个2维数组的列数
//type 这是一个重要的参数关于这个参数的值宏解释放在下边大家一定要引起重视//原文Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices,// or CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.//翻译该参数表示数组的类型矩阵的类型//由CV_8UC1...CV_64FC4来创建1~4通道的矩阵//或者使用CV_8UC(n), ..., CV_64FC(n)来创建多通道的矩阵。/*CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number]其中The number of bits per item为每个矩阵数字的位数实则规定十进制数字的大小这里需要大家对二进制转换10进制比较了解才可Signed or Unsigned为是否有符号数据的类型The channel number为通道的个数Type Prefix为前缀例如CV_8UC3意味着我们使用8位长的无符号字符类型每个像素有三个通道。这是最多四个通道号预定义的。*/
//s 一个用于初始化矩阵元素的初始化的可选值. 旨在在构造之后完成对所有矩阵元素的值设定为特定值的参数, 使用赋值操作来完成这个动作.备注其变形cv::Mat::Mat(Size size,int type,const Scalar s ) 中Size对象也是一种尺寸对象的表达可以简单理解为长宽高组成的一个Size对象当然对于复杂图像而言理解方式没错但是具体表述得在理解后自行变通
2、Mat (int ndims, const int *sizes, int type, const Scalar s)
参数解释
//ndims:维度
//sizes:是一个整型数组且数组中的元素不可变维度是n就有n个元素//每个元素的大小表示每个维度上的尺寸。
//type: 同上
//s同上/*例如int sz[3] {2,2,2};Mat L(3,sz, CV_8UC(1), Scalar::all(0));这个对象就是一个3维的每个维度大小为2且每一个维度8位无符号的图像*/3、Mat (const Mat m)
参数解释
// m:另外一个Mat对象拷贝构造函数。4、Mat (const Mat m, const Rect roi)
参数解释
// 这里涉及到一个非常重要的参数
// roi:感兴趣的区域其类型为Rect这个类型的对象就是一个矩形对象方框。//当然感兴趣的区域不一定是方形的可以是圆的...等注意融会贯通。其他的构造函数只要搞懂上边四个都可以融会贯通。
1.1.2 感兴趣的区域ROI
什么是ROIregion of intrest感兴趣的区域有什么用途旨在图像上选择自己感兴趣的区域用于其他的操作。是一种灵活的技术。如何使用 其实在上边已经悄悄地给大家演示了一种方式
// 利用Rect来完成对Mat对象上感兴趣部分的截取
Mat (const Mat m, const Rect roi) // 就是利用这个构造函数即可其余的方式在后续的实战中慢慢积累但是基础很重要了解本质即活学活用了。关于Rect对象的说明 原文网址Rect类的解释 只需要理解正方形即可。 示例
Mat D (A, Rect(10, 10, 100, 100) ); // using a rectangle//其中Rect中的参数可以理解为xy正方形的起始点坐标【左上顶点】两个10的含义正方形区域的长宽两个100的含义
Mat E A(Range::all(), Range(1,3)); // 利用矩阵行列也可以选择矩形区域用的没有Rect多二、图像的灰度处理
2.1 概念
什么是灰度处理 以RGB色图片为例使得三通道色相等RGB的处理手段称之为灰度处理如果RGB是0,0,0为纯黑0代表没有颜色即每个通道都是黑的所以最终是黑色的如果是255,255,255就是白色最亮为什么进行灰度处理 一般图像处理默认采用灰度处理因为彩色处理的难度和计算量非常大且容易出错还耽误时间在处理好后再转回彩色即可。
2.2 cvtColor()函数
函数原型 void cv::cvtColor ( InputArray src,OutputArray dst,int code,int dstCn 0 ) 函数功能图像的色彩空间转换格式不仅仅局限于灰度转换用途广泛。参数解释 src 原始图像dst 处理后的图像code 色彩空间的转换模式dstCn 目标图像的通道数默认为0(不改变不需要设置该值)如果是0表示自动沿用src的通道数 关于code参数值的说明其决定了色彩转换的模式方式非常多附原网址供参考code参数值列表 红色框选的为将BGR图像进行灰度转换的参数以下类似大家根据实际情况进行选择即可。
2.3 示例
Mat img imread(image.jpg);
Mat grey;
cvtColor(img, grey, COLOR_BGR2GRAY);
namedWindow(image, WINDOW_AUTOSIZE);
imshow(image, grey);
waitKey();后续我们继续学习。持续更新。