方式一:存取像素值。

如果想要获取指定坐标像素的值,可以采用Mat的成员函数at(j,i)来获取坐标()处的像素值。试例代码如下:

  1. //用Mat的成员函数访问图像数据
  2. if (image.channels()==1)
  3. {
  4. image.at<uchar>(j,i)=255;
  5. }
  6. else if (image.channels() == 3)
  7. {
  8. image.at<cv::Vec3b>(j,i)[0] = 255;//blue
  9. image.at<cv::Vec3b>(j,i)[1] = 255;//green
  10. image.at<cv::Vec3b>(j,i)[2] = 255;//red
  11. }

用这种方式还可以给Mat矩阵矩阵赋初值:

  1. cv::Mat kernel(3,3,CV_32F,cv::Scalar(0));
  2. kernel.at<float>(1,1) = 5.0;
  3. kernel.at<float>(0,1) = -1.0;
  4. kernel.at<float>(2,1) = -1.0;
  5. kernel.at<float>(1,0) = -1.0;
  6. kernel.at<float>(1,2) = -1.0;

这种方式比较耗时,一般用来对随机位置的像素进行读写,并不适合用来遍历图像。下面介绍一种比较常用的遍历图像的方式:

方式二:使用指针遍历图像

  1. int nl = image.rows;//height
  2. int nc = image.cols*image.channels();
  3. for (int j=0; j<nl; j++)
  4. {
  5. uchar* data = image.ptr<uchar>(j);//获取第j行数据的指针
  6. for(int i=0; i<nc; i++)
  7. {
  8. data[i] = data[i]/div*div+div/2;//数据处理
  9. }
  10. }

其中Mat的类成员函数ptr(j)是获取图像指定行数据的指针。接下来还介绍一种使用迭代器遍历图像的方式:

方式三:使用迭代器遍历图像

  1. cv::Mat_<cv::Vec3b>::iterator it = image.begin<cv::Vec3b>();//得到初始位置的迭代器
  2. cv::Mat_<cv::Vec3b>::iterator itend = image.end<cv::Vec3b>();//得到终止位置的迭代器
  3. for (; it!=itend; ++it)
  4. {
  5. (*it)[0] = (*it)[0]/div*div+div/2;//分别对各个通道进行数据处理
  6. (*it)[1] = (*it)[1]/div*div+div/2;
  7. (*it)[2] = (*it)[2]/div*div+div/2;
  8. }

使用迭代器遍历图像数据也比较慢,它的主要目的是简化图像遍历的过程从而降低出错的机会。

转载自:https://blog.csdn.net/fujilove/article/details/19421465

Opencv--获取Mat图像数据的方式相关推荐

  1. c语言编程获取摄像头图像,OpenCV 获取摄像头图像数据并显示

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. 用摄像头来获取数据的应用其实并不算太多,最近刚刚好用到,查了下用OpenCV来实现非常方便 ...

  2. opencv获取mat的指针_数字图像处理之opencv中Mat数据操作

    数字图像处理其实就是处理二维矩阵数据.利用opencv来学习处理算法是一种比较好的方式.学习opencv,主要就是调用其中的图像处理函数来实现各种操作.如果要得到想要的处理结果,还需要对图像处理算法有 ...

  3. Python 把OpenCV 获取的图像传递到C

    Python 把OpenCV 获取的图像传递到C 2016年10月11日 14:47:49 阅读数:1946 用OpenCV Python来开发,如果想要用到一些C/C++的图像处理库,就需要创建Py ...

  4. 视图中获取控制器中数据的方式

    在视图中获取控制器中数据的方式有两种: 一种是在控制器的操作中渲染视图时候分配模板数据,这种方式叫推送. 另外一种是在视图中手动获取控制器中的数据,包括控制器中的属性和方法及控制器id,通过$this ...

  5. Qt 中获取摄像头图像数据的方法

    Qt 中获取摄像头图像数据的方法 在 Qt 中提供了 QCamera 类用来操作摄像头.(这里的摄像头指的是电脑上常用的那种 USB 摄像头或网络摄像头,暂时还不支持工业相机.)摄像头获取的实时图像可 ...

  6. OpenCV中Mat,图像二维指针和CxImage类的转换

    在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转 ...

  7. Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/123536470 红胖子(红模仿)的博文大全:开发技术集 ...

  8. Android 获取Camera图像数据

    由于要在Android系统上进行OpenCV相关的功能使用,所以写本篇blog记录一下如何使用Camera API 获取Android的图像数据.本篇暂且使用 deprecated 的Camera A ...

  9. OpenCV中对图像数据进行64F和8U转换的方法

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 在OpenCV中很多对数据的运算都需要转换为64 ...

最新文章

  1. 从一个死锁看mysql innodb的锁机制
  2. 异步爬虫(爬取小说30秒12MB!)Python实现
  3. python编程规范 谷歌_Python最新编程规范,新手必学
  4. 连接maven_Maven系列——超简单入门级教程
  5. Spark Streaming整合flume实战
  6. c语言分治算法求最大值,分治法找最大值(C語言)
  7. 儿子获奖发明和父亲研究所成果高度相似,还不止一个
  8. 颜宁谈院士增选:导师施一公让我特别受益的是:纯粹,做事情的纯粹
  9. 史上最强虎妈:她是一介农妇,17岁嫁给50岁老头,23岁守寡,却养出35个博士...
  10. ORACLE SQL总结六:管理方案对象
  11. 等保数据备份和恢复关键点,这些你该知道!
  12. java读取手机崩溃日志_Android抓取崩溃日志
  13. 1月5日 char **argv是什么用法啊?
  14. 查找所引用的文献在某种期刊下的引用格式(引用风格)
  15. 2018-1-27工作周总结
  16. 看我是怎样捣鼓Linux的
  17. 基于javaweb+jsp的医院住院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)
  18. 宾西法尼亚大学强制对齐标注软件(P2FA)介绍以及使用说明
  19. 【数据库概论】关系代数(传统集合运算和专门关系运算)
  20. html导航栏切换,jQuery实现简单导航栏的样式切换

热门文章

  1. 替换 Nginx 使用 Caddy 作为博客静态服务器
  2. linux5 vnc,CentOS 5 下安装配置VNC
  3. Java 时间处理整理
  4. 【记录】CentOS 安装 gitlab社区版
  5. 【教程】利用OBS+腾讯会议进行线上考试
  6. flask处理http request的时候是多线程还是多进程?
  7. diy 多路监控_如何通过此DIY设置监控空气质量
  8. firebase连接不上_如何在Firebase上托管Blazor应用程序
  9. 狂神说Java学习笔记 Java基础
  10. C++ 使用A*算法解决八数码问题