【opencv】Mat 数据操作
来源:互联网 发布:macbook视频制作软件 编辑:程序博客网 时间:2024/05/18 16:39
<span style="white-space:pre"></span>t = (double)getTickCount();Mat img1(1000, 1000, CV_32F);for (int i=0; i<1000; i++){for (int j=0; j<1000; j++){img1.at<float>(i,j) = 3.2f;}}t = (double)getTickCount() - t;printf("in %gms\n", t*1000/getTickFrequency());//***************************************************************t = (double)getTickCount();Mat img2(1000, 1000, CV_32F);for (int i=0; i<1000; i++){for (int j=0; j<1000; j++){img2.ptr<float>(i)[j] = 3.2f;}}t = (double)getTickCount() - t;printf("in %gms\n", t*1000/getTickFrequency());//***************************************************************t = (double)getTickCount();Mat img3(1000, 1000, CV_32F);float* pData = (float*)img3.data;for (int i=0; i<1000; i++){for (int j=0; j<1000; j++){*(pData) = 3.2f;pData++;}}t = (double)getTickCount() - t;printf("in %gms\n", t*1000/getTickFrequency());//***************************************************************t = (double)getTickCount();Mat img4(1000, 1000, CV_32F);for (int i=0; i<1000; i++){for (int j=0; j<1000; j++){((float*)img3.data)[i*1000+j] = 3.2f;}}t = (double)getTickCount() - t;printf("in %gms\n", t*1000/getTickFrequency());/*********加强版********/t = (double)getTickCount();Mat img5(1000, 1000, CV_32F);float *pData1;for (int i=0; i<1000; i++) { pData1=img5.ptr<float>(i);for (int j=0; j<1000; j++) { pData1[j] = 3.2f; } } t = (double)getTickCount() - t;printf("in %gms\n", t*1000/getTickFrequency());/*******终极版*****/t = (double)getTickCount();Mat img6(1000, 1000, CV_32F);float *pData2;Size size=img6.size();if(img2.isContinuous()){size.width = size.width*size.height;size.height = 1;}size.width*=img2.channels();for(int i=0; i<size.height; i++){pData2 = img6.ptr<float>(i);for(int j=0; j<size.width; j++){pData2[j] = saturate_cast<float>(3.2f);}}t = (double)getTickCount() - t;printf("in %gms\n", t*1000/getTickFrequency());
1.存取单个像素值
最通常的方法就是
img.at<uchar>(i,j) = 255;img.at<Vec3b>(i,j)[0] = 255;
2.如果你觉得at操作显得太笨重了,不想用Mat这个类,也可以考虑使用轻量级的Mat_类,使用重载操作符()实现取元素的操作。
cv::Mat_<uchar> im2= img; // im2 refers to imageim2(50,100)= 0; // access to row 50 and column 100
3.用迭代器iterator扫描图像
Mat_<Vec3b>::iterator it = img.begin<Vec3b>();Mat_<Vec3b>::iterator itend = img.end<Vec3b>();for (; it!=itend; it++){ (*it)[0] = 255;}
5.整行整列像素值的赋值
对于整行或者整列的数据,可以考虑这种方式处理
img.row(i).setTo(Scalar(255)); img.col(j).setTo(Scalar(255));
0 0
- 【opencv】Mat 数据操作
- opencv MAT数据操作
- opencv学习笔记2--Mat数据操作
- opencv的Mat格式数据操作
- opencv Mat 像素操作
- Opencv Mat操作大全
- opencv mat像素操作
- Opencv Mat元素操作
- Opencv Mat操作大全
- opencv Mat基本操作
- opencv Mat常用操作
- 【OpenCV】Mat基本操作
- opencv的mat操作
- OpenCV Mat常用操作
- Opencv图像Mat操作
- 学习OpenCV——Mat数据操作之普通青年、文艺青年、暴力青年.& Mat注意事项
- opencv——mat操作
- OpenCV中的Mat阵列操作
- 浅谈hibernate save ,update 和 saveOrUpdate的区别
- How to anti-Obfuscated code
- 关于pig中文输入的问题
- cocos2d-2.0-rc2-x-2.0.1 windows环境配置
- 删除文件路径下的.svn目录的脚本
- 【opencv】Mat 数据操作
- iOS KVO & KVC
- structs2 投影的介绍
- iOS疯狂详解之TableView以及TableViewCell背景设置
- 【BZOJ】【P2893】【征服王】【题解】【缩点费用流】
- 点击PopupWindow 外部区域消失
- 怎样开始冥想(上)
- 深入java--String(正则表达式)
- Effective C++ Item11 Note