Mat对象的使用及注意事项
来源:互联网 发布:7英寸windows平板 编辑:程序博客网 时间:2024/06/03 04:07
1,什么是Mat对象 ,见下图
Mat对象封装了图像在内存中的信息,用于表示一副加载到内存中的图像,是opencv2.0以后引入的
相比之前的IpImage对象,具有自动分配内存,不存在内存泄漏的优点,Mat对象分为头部与数据部分。
2,Mat对象的使用
因为Mat对象分为头部和数据两部分,所以当复制mat对象时有两种情况
1,完全复制:就是把Mat对象的头部和数据部分完全复制 可以通过 clone()和copyTo两个API实现
比如Mat dst=src.clone() 或者 src.copyTo(dst)
2,部分复制:只复制Mat对象的头和指针部分,不复制数据
比如 Mat src=imread("path"),Mat dst(src)
3,注意事项
1,Mat对象输出图像的内存是自动分配的,无需考虑内存分配问题
2,赋值操作和拷贝构造函数只会复制头部
3,完全复制只能通过clone和copyTo实现
4,Mat对象的创建
Mat M(2,2,CV_8UC3,Scalar(0,0,255))
前两个参数分别表示行(row)跟列(column)也就是图像的宽,高,CV_8UC3中的8表示每个通道占8位
U表示无符号,C表示Char类型,3表示图像的通道是数目是3,Scalar(0,0,255)用于初始化每个像素通道的值
这是个向量,向量的维度和图像的通道数目保持一致。
演示代码
#include <opencv2\opencv.hpp>#include <highgui.h>using namespace cv;using namespace std;int main(int argc, char** argv){Mat src;src = imread("test.jpg");if (src.empty()){printf("图像加载错误!");return -1;}//创建显示窗口namedWindow("input",CV_WINDOW_AUTOSIZE);//imshow("input",src);//Mat dst;//dst = Mat(src.size(),src.type());//dst = Scalar(127,0,255);//初始化每个像素BGR通道的值//namedWindow("output-1", CV_WINDOW_AUTOSIZE);//imshow("output-1",dst);Mat dst;//src.copyTo(dst);//namedWindow("output-2", CV_WINDOW_AUTOSIZE);//imshow("output-2",dst);cvtColor(src,dst,CV_BGR2GRAY);printf("input image channel:%d\n", src.channels());printf("output image channel:%d\n",dst.channels());int cols = dst.cols;int rows = dst.rows;//输出图像的宽,高printf("rows:%d cols:%d",rows,cols);//获取第0行第一个像素的值const uchar* firstRow = dst.ptr<uchar>(0);printf("first pixel value:%d\n",*firstRow);Mat M(10,10,CV_8UC1,Scalar(127));cout << "M=" << endl << M << endl;waitKey(0);return 0;}
阅读全文
0 0
- Mat对象的使用及注意事项
- opencv中Mat的使用注意事项
- opencv Mat 使用时的注意事项
- 对象析构谈—— delete this 的使用及注意事项
- 对象析构谈—— delete this 的使用及注意事项
- 对象析构谈—— delete this 的使用及注意事项
- 对象析构谈—— delete this 的使用及注意事项
- 对象析构谈—— delete this 的使用及注意事项
- 对象析构谈—— delete this 的使用及注意事项
- 对象析构谈—— delete this 的使用及注意事项
- 锂电池的使用及注意事项
- TreeMap的使用及注意事项
- openSessionInView的使用及注意事项
- shared_ptr 的使用及注意事项
- crontab 的使用及注意事项
- stringstrream的使用及注意事项
- 索引的使用及注意事项
- NSUserDefaults 的使用及注意事项
- Java SE基础知识
- faster-rcnn介绍
- 对SPEA算法的一些总结
- leetcode 357. Count Numbers with Unique Digits
- 关于ios 三方库文件冲突解决方案
- Mat对象的使用及注意事项
- Spark Streaming 实战案例(四) Spark Streaming 缓存、Checkpoint机制
- Jedis的多种使用方式
- POJ 1321-棋盘问题(A)
- iOS函数响应式编程应用研究
- Windows x64内核中修改进程入口点
- 【Django】使用ImageField
- ORACLE 03 用户,方案的创建与管理
- (OK) Android-x86-7.1.1/ kernel 4.4.62