1.下面第一章图是一位美女图像,和其他数据一样图像在计算机中也是以二进制存储,下面第二张图
2.在摄像头眼里一幅图像就是一个矩阵或者说是二维数组,数组元素是像素值
3.opencv中以Mat对象表示图像的数据结构
-------lpllmage是从2001年opencv发布之后就一直存在,是c语言表示的数据结构,需要开发者自己分配和管理内存,对大型程序使用它容易导致内存泄漏问题。
-------Mat对象是opencv2.0之后引进的图像数据结构,自动分配内存,不存在内存泄漏问题,是面向对象的数据结构,分为两部分:头部和数据部分。
4.Mat对象介绍
(1)从文件加载一幅图像
//从文件加载一幅图像 Mat src; src = imread("E:\\vsprom\\learn03\\nv02.jpg"); if (src.empty()) { cout << "can't load image..." << endl; return -1; } namedWindow("in win", CV_WINDOW_AUTOSIZE); imshow("in win", src);
(2)根据一幅图像的尺寸和类型创建一副空图像
1 2 3 4 5 | Mat dst; dst = Mat(src.size(),src.type()); dst = Scalar(0, 0, 255); //初始化像素值B=127,G=0,R=255 namedWindow( "out win" , CV_WINDOW_AUTOSIZE); imshow( "out win" , dst); |
截图显示
(3)克隆图像与原图像一模一样
Mat dst; //dst = Mat(src.size(),src.type()); //dst = Scalar(0, 0, 255);//初始化像素值B=127,G=0,B=255 dst = src.clone();//克隆出一幅图像 namedWindow("out win", CV_WINDOW_AUTOSIZE); imshow("out win", dst);
(4)拷贝和克隆一样,都是产生一幅与原来图像一样的一幅图
src.copyTo(dst);//拷贝图像到dst与clone一样
(5)图像转换(色彩空间的转换)cvtColor(src, dst, CV_BGR2GRAY);
cvtColor(src, dst, CV_BGR2GRAY);//将src从BGR色彩空间转为灰度,并输出到dst这幅图中
效果图:
(6)Mat对象使用要点:
-----输出图像的内存是自动分配的
-----使用opencv的c++接口不用考虑内存分配问题
-----赋值操作和拷贝构造函数只会复制头部分,不会赋值图像的数据部分
-----使用clone和copyTo两个函数实现图像数据的完全拷贝
(7)//访问dst的第一个像素的灰度值
Mat m1; m1.create(src.size(), src.type()); m1 = Scalar(0, 255, 0);
(8)创建小数组,也就是我们前面使用的掩膜
Mat ker = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
(9)使用构造函数Mat M
1 2 3 4 5 6 | Mat m(100,100,CV_8UC1,Scalar(127)); //第一个参数行数,第二个参数列数,第三个参数8表示每个通道占8位,U表示无符号,C表示char类型,3表示通道数是3,第四个参数Scalar是向量表示初始化每个像素值是多少,向量长度对应通道数目一致 cout << "m=" << endl << m << endl; //Mat ker = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); namedWindow( "out win" , CV_WINDOW_AUTOSIZE); imshow( "out win" , m); |
效果:
(10)小技巧生成一个指定行数和列数的二维数组-zeros函数
Mat m2 = Mat::zeros(2, 2, CV_8UC1); cout << "m2=" << endl << m2 << endl;
效果图:
有疑问可加QQ群:218436354
需要程序源码的可以加我微信x241602私聊。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?