灰度图:2维矩阵

彩色图:3维矩阵

ps:目前大部分设备都是用无符号 8 位整数(类型为 CV_8U)表示像素亮度

Mat类定义:

class CV_EXPORTS Mat
{
public://一系列函数.../* flag 参数中包含许多关于矩阵的信息,如:-Mat 的标识-数据是否连续-深度-通道数目*/int flags;//矩阵的维数,取值应该大于或等于 2int dims;//矩阵的行数和列数,如果矩阵超过 2 维,这两个变量的值都为-1int rows, cols;//指向数据的指针uchar* data;//指向引用计数的指针//如果数据是由用户分配的,则为 NULLint* refcount;//其他成员变量和成员函数...
};

单通道图像:元素类型一般为 8U(即 8 位无符号整数),也可以是 16S、32F 等;这些类型可以直接用 uchar、short、float 等 C/C++语言中的基本数据类型表达

多通道图像:如RGB彩色图像,需要用三个通道来表示。在这种情况
下,如果依然将图像视作一个二维矩阵,那么矩阵的元素不再是基本的数据类型。可以采用Vec类,表示一个向量。如8U类型的RGB彩色图像使用Vec3b。

对于 Vec 对象,可以使用[]符号如操作数组般读写其元素,如:

Vec3b color; //用 color 变量描述一种 RGB 颜色
color[0]=255; //B 分量
color[1]=0; //G 分量
color[2]=0; //R 分量

at()函数:实现读取矩阵中的某个像素,或者对某个像素进行赋值操作。

uchar value = grayim.at<uchar>(i,j);//读出第 i 行第 j 列像素值
grayim.at<uchar>(i,j)=128; //将第 i 行第 j 列像素值设置为 128

对图像进行遍历,分别对单通道的 grayim 以及 3 个通道的 colorim,然后对两个图像的所有像素值
进行赋值,最后现实结果

Mat grayim(600, 800, CV_8UC1);Mat colorim(600, 800, CV_8UC3);//遍历所有像素,并设置像素值for( int i = 0; i < grayim.rows; ++i)for( int j = 0; j < grayim.cols; ++j )grayim.at<uchar>(i,j) = (i+j)%255;//遍历所有像素,并设置像素值for( int i = 0; i < colorim.rows; ++i)for( int j = 0; j < colorim.cols; ++j ){Vec3b pixel;pixel[0] = i%255; //Bluepixel[1] = j%255; //Greenpixel[2] = 0; //Redcolorim.at<Vec3b>(i,j) = pixel;}//显示结果imshow("grayim", grayim);imshow("colorim", colorim);waitKey(0);

使用迭代器遍历:

Mat grayim(600, 800, CV_8UC1);Mat colorim(600, 800, CV_8UC3);//遍历所有像素,并设置像素值MatIterator_<uchar> grayit, grayend;for( grayit = grayim.begin<uchar>(), grayend =
grayim.end<uchar>(); grayit != grayend; ++grayit)*grayit = rand()%255;//遍历所有像素,并设置像素值MatIterator_<Vec3b> colorit, colorend;for( colorit = colorim.begin<Vec3b>(), colorend =
colorim.end<Vec3b>(); colorit != colorend; ++colorit){(*colorit)[0] = rand()%255; //Blue(*colorit)[1] = rand()%255; //Green(*colorit)[2] = rand()%255; //Red}//显示结果

采用指针:

Mat grayim(600, 800, CV_8UC1);Mat colorim(600, 800, CV_8UC3);//遍历所有像素,并设置像素值for( int i = 0; i < grayim.rows; ++i){//获取第 i 行首像素指针uchar * p = grayim.ptr<uchar>(i);//对第 i 行的每个像素(byte)操作for( int j = 0; j < grayim.cols; ++j )p[j] = (i+j)%255;}//遍历所有像素,并设置像素值for( int i = 0; i < colorim.rows; ++i){//获取第 i 行首像素指针Vec3b * p = colorim.ptr<Vec3b>(i);for( int j = 0; j < colorim.cols; ++j ){p[j][0] = i%255; //Bluep[j][1] = j%255; //Greenp[j][2] = 0; //Red}}//显示结果

OPENCV-1 学习笔记相关推荐

  1. opencv进阶学习笔记3:像素运算和图像亮度对比度调节

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版目录: python+opencv进阶版学习笔记目录(适合有一定基础) 像素运算 要求两张图大小,以及格式(np ...

  2. 【计算机视觉】opencv入门学习笔记Part.1

    [计算机视觉]opencv入门学习笔记Part.1 1 前言 1.1 opencv概述(摘取自百度百科) 1.2 图像概念引入 1.3 安装opencv库 2 图像基本操作 2.1 图像的读取 2.2 ...

  3. 【OpenCV入门学习笔记2】:Mat对象

    b站:https://www.bilibili.com/video/BV1uW411d7Wf?p=5 我在b站的学习笔记和实验代码的整理如下: 示例代码: Matdemo //------------ ...

  4. opencv进阶学习笔记14:分水岭算法 实现图像分割

    基础版学习笔记目录: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 分水岭算法原理 分水岭算法 ...

  5. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  6. opencv进阶学习笔记12:轮廓发现和对象测量

    基础版笔记目录: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 轮廓发现 1轮廓发现介绍 基础 ...

  7. opencv进阶学习笔记11:cannny边缘检测,直线检测,圆检测

    基础版笔记传送门 python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) cannny边缘检测 基础版边 ...

  8. opencv进阶学习笔记10:图像金字塔和图像梯度

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 图像金字塔 变小 变大 原理 ...

  9. opencv进阶学习笔记8:模板匹配

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 模板匹配原理 模板匹配(Te ...

  10. opencv进阶学习笔记7:直方图,直方图均衡化,直方图比较,直方图反向投影

    基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 直方图基础讲解: opencv学 ...

最新文章

  1. Playmaker Input篇教程之PlayMaker菜单概述
  2. 1.5 测试php解析
  3. 移动端布局三种视口_移动端开发知识[系列] - 视口viewport
  4. 【Oracle认证必读】常见问题解答
  5. 快速复制数据库表中的数据SQL
  6. FJ的字符串java问题_蓝桥杯VIP试题 之 基础练习 FJ的字符串- JAVA
  7. java识别系统_[Java教程]Java识别操作系统
  8. 物理与数学的崩溃关系
  9. python自动排版公众号_如何实现公众号排版自动化?微信公众号一键排版软件推荐...
  10. 晶振旁的电阻(并联与串联)
  11. leetcode题目-最小栈和用两个栈实现队列
  12. 在linux中如何修改保存gun文件_Linux下文件重命名、创建、删除、修改及保存文件...
  13. 新形势下的烟草商业数据中心建设
  14. jQuery操作元素和DOM
  15. Google Cloud Messaging:可折叠消息
  16. 【西米软件推荐】Downie 4 Mac OS 下最好用的视频下载软件
  17. Windows XP瘦身提速大法!
  18. mysql数据库性能测试工具推荐
  19. 【环境配置】Turtlebot2 激光雷达+深度相机 GAZEBO仿真
  20. 1198. Substring

热门文章

  1. python人脸识别门禁_用Python做人脸识别
  2. 富文本++php+源码,自己实现富文本编辑器
  3. php new static,PHP面向对象中new self( )和 new static( ) 的区别
  4. php mysql html 转义字符_php, html, javascript, mysql 之间的特殊字符处理
  5. java连接mongodb_第78天: Python 操作 MongoDB 数据库介绍
  6. linux离线安装redmine_Linux 下一款非常好用的翻译软件
  7. 大学期末c语言作业演示,大学C语言期末考试练习题(带详解答案)
  8. Unity 2017 Game Optimization 读书笔记 The Benefits of Batching
  9. 优化器,SGD+Momentum;Adagrad;RMSProp;Adam
  10. 第七章 字典和集合[DDT书本学习 小甲鱼]【2】