当前位置: 首页 > wzjs >正文

淘宝客网站WordPress孝感建设银行网站

淘宝客网站WordPress,孝感建设银行网站,深圳公司注册服务,网页编辑文字一.Mat概念 Mat 是整个图像存储的核心也是所有图像处理的最基础的类,Mat 主要存储图像的矩阵类型,包括向量、矩阵、灰度或者彩色图像等等。Mat由两部分组成:矩阵头,矩阵数据。矩阵头是存储图像的长度、宽度、色彩信息等头部信息&a…

一.Mat概念

        Mat 是整个图像存储的核心也是所有图像处理的最基础的类,Mat 主要存储图像的矩阵类型,包括向量、矩阵、灰度或者彩色图像等等。Mat由两部分组成:矩阵头,矩阵数据。矩阵头是存储图像的长度、宽度、色彩信息等头部信息;矩阵数据则是存储具体的图像数据。(我的理解就是,Mat是把图像分为一块一块矩阵类型保存,矩阵头显示这张图片基本信息,如这张图片多大,是不是彩色;具体的信息存储由矩阵数据存储)。

二.Mat通道

图中C1,C2,C3,C4代表几通道 ;前面CV_8U,8S,16U,16S,32U,32S代表用什么类型存储,例如:CV_8U就是用8位无符号类型存储,CV_8S就是用8位有符号存储。

  •  单通道(灰度图),就是图片是灰色的

  •  双通道(二值图像),就是黑白照片

  •  三通道(RGB 彩色图像)

  •  四通道(带 Alpha 的四通道图像),就是ARGB图像,更好看一点。

 三.Mat创建和构造方法

  • Mat(int rows, int cols, int type);

 重载的构造函数,这个构造函数在创建的时候,提供矩阵的大小,分别是 rows、cols 以及存储类型 type
rows:行数,也指的是图像的高度,height。
cols:列数,也指的是图像的宽度,width。
type:通道类型,具体的看上面的图
示例:Mat t1 = Mat(300,300,CV_8UC1),这指的是创建一个 width:300,height:300,单通道的灰度图像.

  •  Mat(Size size, int type);

 重载的构造函数,这个构造函数在创建的时候,需要传入 Size 类和类型。
第一个传参:Size 结构体,Size(width,height)
第二个传参:type 通道类型,具体的看上面的图
示例:Mat t2 = Mat(Size(300,300),CV_8SC3),这指的是创建一个 width:300,height:300,三通道的灰度图像

  •  Mat(int rows, int cols, int type, const Scalar& s);

 重载的构造函数,这个构造函数在创建的时候,提供矩阵的大小,分别是 rows、cols、存储类型 type、还有 Scalar 颜色标量。
第一个传参:rows 行数,也指的是图像的高度,height。
第二个传参:cols 列数,也指的是图像的宽度,width。
第三个传参:type 通道类型,具体的看上面的图
第四个传参:Scalar 颜色标量,Scalar(v0,v1,v2,v3),v0,v1,v2,v3 分别对应 OPENCV 颜色分量的四个值
示例: Mat mat = Mat(300,300,CV_8UC3,Scalar(255,255,255));表示的是创建cols:300,rows:300,三通道的灰度,颜色标量为白色的图像

  • Mat::zeros(rows,cols,type); 

 重载的构造函数,这个构造函数在创建的时候,提供矩阵的大小,分别是 rows、cols 以及存储类型 type。ZEROS 相当于创建一张黑色的图片,每个像素通道为 0,并且 Scalar(0,0,0)。
第一个传参:rows 行数,也指的是图像的高度,height。
第二个传参:cols 列数,也指的是图像的宽度,width。
第三个传参:type 通道类型,具体的看上面的图
示例: Mat::zeros(300,300,CV_8SC3);,这指的是创建一个 width:300,height:300,三通道的彩色图像,Scalar(0,0,0),相当于Mat mat = Mat(300,300,CV_8SC3,Scalar(0,0,0));

  •  Mat::ones(rows,cols,type);

 重载的构造函数,这个构造函数在创建的时候,提供矩阵的大小,分别是 rows、cols 以及存储类型 type。ONES 相当于每个像素第一个通道为 1,后面两个通道为 0。
第一个传参:rows 行数,也指的是图像的高度,height。
第二个传参:cols 列数,也指的是图像的宽度,width。
第三个传参:type 通道类型,具体的看上面的图
示例: Mat::ones(300,300,CV_8SC3),这指的是创建一个 width:300,height:300, 三通道的彩色图像,Scalar(1,0,0),这等同于 Mat mat = Mat(300,300,CV_8SC3,Scalar(1,0,0));

四. imread读取图片信息和imwrite写入数据

  1. imread:读取图片信息。

 Mat imread( const String& filename, int flags = IMREAD_COLOR );

第一个参数:filename 图片的名称,名称可以是绝对路径也可以是相对路径
第二个参数:flags 标识符,flags 标识符默认为 IMREAD_COLOR。flags 一般分为三种:
IMREAD_UNCHANGED(<0)按原样加载图像(包括 alpha 通道(如果存在)
IMREAD_GRAYSCALE(0)将图像作为强度加载(灰白照片)
IMREAD_COLOR(> 0)以 RGB 格式加载图像(彩色照片)

返回值:Mat 矩阵

  • 例如:读取彩色三通道图片

Mat img_mat = imread("frame1.jpg");
printf("width = %d, height = %d, channels = %d\n", img_mat.cols, img_mat.rows, img_mat.channels());
...........................................................................................
输出结果:width = 1920, height = 1080, channels = 3

  • 例如:读取灰白单通道图片

Mat img_mat_gray = imread("gray_frame1.jpg", IMREAD_GRAYSCALE);
printf("img_mat_gray_width = %d, img_mat_gray_height = %d, img_mat_gray_channels = %d\n", img_mat_gray.cols,img_mat_gray.rows, img_mat_gray.channels());
.................................................................................................................
输出的结果:img_mat_gray_width = 1920, img_mat_gray_height = 1080, img_mat_gray_channels = 1 

2. imwrite:保存图片

 imwrite(const String& filename, InputArray image, const std::vector<int>& params);

第一个传参:filename 表示要保存的文件名
第二个传参:image 表示需要保存的图像数据
第三个传参:params 保存图像可选参数,主要是设置图像的质量,设置规则具体的我们来看看,该参数需要按照参数 id+参数值成对出现,可以出现多对参数值(比如 (paramId_1, paramValue_1, paramId_2, paramValue_2, ...)),但必须保证这些参数对是相关的,比如保存 JPG 图像时,只能使用和 JPEG 相关的参数 ID 进行组合使用。这里的 ID 基本上是 cv::ImwriteFlags。

  • 例如:使用默认的方式 imwrite 保存图片

Mat mat = Mat(300,300,CV_8UC3,Scalar(218,112,214));
imwrite("mat_demo.jpg", mat);
。。。。。。。。。。。。。。。。。。
上面是使用默认的方法保存图片,这种方法的所有参数都是默认选项。出来图片就是:

  •  使用 params 的方式 imwrite 保存图片

Mat quality_frame1_mat = imread("frame1.jpg");
std::vector<int> params = {cv::IMWRITE_JPEG_QUALITY, 40};
imwrite("quality_mat_demo.jpg", quality_frame1_mat , params);
。。。。。。。。。。。。。。。。。。。。。。。。。
这种方法使用的是 params 参数的方式去设置,上面我们设置了图像的质量在 40,大家如果想设置其他功能可以参考上面的枚举进行设置。经过编码质量 40 的处理后的图像大小小于原图像大小,这说明编码质量关乎着文件的大小和画面的质量

五.代码具体

#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>using namespace cv; //Must Need Write cv
using namespace std;int main()
{//构造参数Mat t0 = Mat(300,300,CV_8UC1); //Create a 300x300 single channel matrixMat t1 = Mat(Size(200,200),CV_8UC1); //Create a 300x300 single channel matrixMat t2 = Mat(100,100,CV_8UC1,Scalar(255,255,255)); //Create a 300x300 single channel matrixMat t3 = Mat::zeros(300,300,CV_8UC1); //Create a 300x300 single channel matrixMat t4 = Mat::ones(200,200,CV_8UC1); //Create a 300x300 single channel matrixstd::vector<int> params = {cv::IMWRITE_JPEG_QUALITY, 40};//imwrite写入数据imwrite("t0.jpg",t0);imwrite("t1.jpg",t1);imwrite("t2.jpg",t2);imwrite("t3.jpg",t3,params);imwrite("t4.jpg",t4);//imread读取数据Mat a0 = imread("t0.jpg");Mat a1 = imread("t3.jpg");Mat a2 = imread("t4.jpg",IMREAD_GRAYSCALE);printf("a0 heigh:%d weigh: %d channel:%d\n",a0.rows,a0.cols,a0.channels());printf("a3 heigh:%d weigh: %d channel:%d\n",a2.rows,a2.cols,a2.channels());return 0;
}

http://www.dtcms.com/wzjs/822662.html

相关文章:

  • 国外html 网站汕头网站建设搭建
  • 彩票销信 网站怎么做装修设计公司公司价格表
  • 做网站那几步成都市住房和城乡建设部网站
  • 做惠而浦售后网站赚钱软膜做网站有用吗
  • 晋中市住房保障和城乡建设局网站网站建设毕业设计摘要
  • 网站开发历史南开大学 网站开发技术 刘冲
  • 检索类的网站建设猪八戒网网站建设
  • 分类信息网站网页页脚模板
  • 中国古建筑网站网站开发询价表模板下载
  • 网站热力图怎么做网页框架图
  • 淄博网站制作品牌定制西安网站维护招聘
  • 网站优化吧定制系统开发公司
  • 百度云主机上装网站wordpress获取当前分类下的子分类
  • 无锡网站怎么优化排名广州网站设计哪里找
  • 如何查网站是织梦做的app下载入口
  • 台州市网站制作公司内部交流 网站模板
  • 大一做家教的网站长春网站优化教程
  • 关于建设单位网站的方案wordpress评论框修改
  • 建设域名网站桂林微代码网络科技有限公司
  • seo网站布局免费自助建站怎么样
  • 济南网站建设企业网站对于企业的作用
  • 网站信息可以边建设边组织项目网络图怎么看
  • 建筑招聘网站有哪些网站建设中广告法绝对化用语整理
  • 扬州网站建设myvodowordpress文章显示小时分钟
  • 网站风格定位上海品牌策划公司有哪些
  • 网站源码怎么弄注册网站的公司名字
  • 赶集门户网站建设方案济南市住监局官网
  • 网站建设的搜索栏怎么设置兰州做it网站运营的怎么样
  • 免费搭建商城网站小企业怎么建网站平台
  • 做美容美发的网站有哪些深圳做的好的电子行业招聘网站