OpenCV学习之基本概念

文章目录

  • OpenCV学习之基本概念
    • 1.访问像素级
    • 2.基本API概念-Mat
    • 3.直方图

1.访问像素级

方法一:使用模板函数at<>,必须指出矩阵单元类型

Mat src1=imread("lena.jpg",IMREAD_GRAYSCALE);
uchar pixel1=src1.at<uchar>(0,0);
Mat src2=imread("lena.jpg",IMREAD_COLOR);
Vec3b pixel2=src2.at<Vec3b>(0,0);

请注意:at<>方法并不是很有效,因为必须从像素的行列计算出精确的内存位置。当逐个处理整幅图像中的像素是非常费时的。
方法二:使用函数ptr<>,它返回指向图像特定行的一个指针。

uchar R,G,B;
Mat src3=imread("lena.jpg",IMREAD_COLOR);
for(int i=0; i<src3.rows; i++)
{Vec3b *pixrow=src3.ptr<Vec3b>(i);for(int j=0; j<src3.clos; j++){R=pixrow[j][0];G=pixrow[j][1];B=pixrow[j][2];}
}

2.基本API概念-Mat

Mat类是存储和操作OpenCV中图像的主要数据结构。
这个类是在core模块中定义的。OpenCV已经实现了对这些数据结构自动分配和释放内存的机制。
Mat类用于密集的n维单通道或多通道数组。实际上它可以存储实数或复数值向量和矩阵、彩色图像或灰度图像、直方图、点云等。
有许多种不同的方式可以用来创建一个Mat对象,最流行的方法是构造函数,其数组大小和类型被指定为:

Mat(nrows,nclos,type,fillValue)

数组元素的初始值可以由Scalar类设置为一个典型的四元素向量(对于存储在数组中的图像的每个RGB和透明度分量)如:

Mat img_A(4, 4, CV_8U, Scalar(255));
//白色图像
//具有8位无符号整数的4*4单个通道数组
//

任何基本类型都可以用一个标识符以下面的形式定义:

CV_<bit depth>{U|S|F}C(<number of channels>)

在上面代码中,U,S,F分别代表unsigned、signed、float数据类型。

此外,需要注意的是,这3个声明是等价的:CV_8U 、CV_8UC1 、 CV_8UC(1);均表示8位无符号单通道数组,最适合于灰度图像的整形数组。
更多参考博客

3.直方图

对直方图建模使图像可以改变其对比度,这称为直方图的均衡化
直方图建模对于以对比度变化的方式进行图像增强是一种非常有用的技术。直方图均衡化允许低对比度的图像区域获取更高的对比度。
在OpenCV中,使用函数void calcHist可以计算图像直方图;
使用函数void equalizeHist可进行直方图均衡化。

void calcHist(const Mat* images,  //集合中第一幅图像的地址int nimages,  //原图像的数量const int* channels,  //用来计算直方图的通道列表,通道数0~2InputArray mask, //可选项mask,用来指示直方图中图像像素的个数OutputArray hist, //输出直方图int dims, //直方图的维数const int* histSize, //每一维度上直方图大小的数组。const float** ranges, //每一维度上直方图bin边界维度数组的数组bool uniform=true, //默认情况true表示直方图是均匀的bool accumulate=false) //默认情况false表示直方图是不叠加的。
void equalizeHsit(InputArray src, OutputArray dst)

OpenCV学习之基本概念相关推荐

  1. opencv学习笔记21:直方图和掩膜 原理及其应用

    直方图概念 如图:下面黑色图为上面图的直方图 横坐标:图像中各个像素点的灰度级 纵坐标:具有该灰度级的像素个数. 归一化直方图 横坐标:图像中各个像素点的灰度级 纵坐标:出现该灰度级的概率. DIMS ...

  2. OpenCV学习笔记之Mat

    一. Mat介绍 在2001年刚刚出现的时候,OpenCV基于 C 语言接口而建.为了在内存(memory)中存放图像,当时采用名为 IplImage 的C语言结构体,时至今日这仍出现在大多数的旧版教 ...

  3. OpenCV学习笔记(十):图像金字塔Pyramid和图像缩放:pyrDown(),pyrUp(),resize()

    OpenCV学习笔记(十):图像金字塔Pyramid和图像缩放:pyrDown(),pyrUp(),resize() 一.图像金字塔定义: 图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是 ...

  4. youcans 的 OpenCV 学习课—8.频率域图像滤波(上)

    欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV 学习课』 系列,持续更新中 youcans 的 OpenCV 学习课-1.安装与环境配置 yo ...

  5. python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化

    本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_hi ...

  6. 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

    1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...

  7. OpenCV学习日记(2)

    绪言 图像基本要素简介 1.灰度色彩空间 2.BGR色彩空间 3.HSV色彩空间 数学知识简介 图像处理中的数学 连续傅里叶变换 离散时间傅里叶变换 离散傅里叶变换 傅里叶逆变换 卷积 滤波器 简介 ...

  8. 某人写的openCV学习笔记

    原文地址:某人写的openCV学习笔记作者:拔剑 http://blog.csdn.net/thefutureisour 我的OpenCV学习笔记(25):c++版本的高斯混合模型的源代码完全注释 之 ...

  9. 某人写的openCV学习笔记_拔剑-浆糊的传说_新浪博客

    http://blog.csdn.net/thefutureisour 我的OpenCV学习笔记(25):c++版本的高斯混合模型的源代码完全注释 之前看到过C版本的,感觉写的很长,没有仔细看,但是C ...

最新文章

  1. jdk1.8.0_45源码解读——Map接口和AbstractMap抽象类的实现
  2. ADO.NET数据库操作------SqlDataReader和SqlDataAdapter 区别
  3. 实例讲解ThinkPHP的UploadFile文件上传类的详细用法
  4. JavaScript 开发者年度调查报告(2016-01)
  5. java文件操作和_JAVA文件操作类和文件夹的操作
  6. 清除浮动造成的影响的解决方案总结
  7. 站在K2角度审视流程--任务的独占与释放
  8. python拿什么做可视化界面好_5大Python可视化库到底选哪个好?一篇文章搞定从选库到教学...
  9. java中awt和swing是的关系以及区别
  10. Doc2EDAG: An End-to-End Document-level Framework for Chinese Financial Event Extraction
  11. java+编辑距离自动机_编辑距离,重叠,组装算法和python程序.pptx
  12. 无机金属专业里有计算机课吗,无机非金属材料工程专业课程有不少
  13. 基于STM32F429动态信号测试分析系统
  14. CSDN页面上方广告条太烦人?js写个油猴脚本给它隐藏了~
  15. 计算机科学的主要研究领域是,斯坦福大学计算机科学专业研究领域有哪些?
  16. pandas读取excel带汉字的列头,Pandas读取excel与中文文件名
  17. 吊炸天,Spring Security还有这种用法
  18. 软件设计-UML类图详解说明
  19. 苯四乙酸 cas1820793-31-4 齐岳中间体|单体材料
  20. Pytorch快速搭建Alexnet实现手写英文字母识别+PyQt实现鼠标绘图

热门文章

  1. activity_manager_server
  2. iOS常用功能 - 根据链接生成二维码图片
  3. shell脚本编程笔记(十)—— 正则表达式
  4. 英特尔第十代处理器为什么不支持win7_10代cpu能不能装win7?10代cpu装win7全面分析(支持十代cpu)...
  5. 零起步的Hadoop实践日记(搭建hadoop和hive)
  6. 最小公倍数和最小公约数
  7. Git commit (amend)
  8. matlab确定分段函数的间断点,凡分段函数必有间断点
  9. asp新闻发布系统 html,构建你的网站新闻自动发布系统之一_asp实例
  10. 信息传输速率与传信率_波特率和数据传输速率的关系