转自:OpenCV Tutorial: core 模块. 核心功能

改变图像对比度和亮度:convertTo

可以把  看成源图像像素,把  看成输出图像像素。这样一来,调整亮度和对比度的方法可表示为:

两个参数  和  一般称作 增益 和 偏置 参数。我们往往用这两个参数来分别控制 对比度 和 亮度 。

OpenCV很多函数都使用到这两个参数(如addWeighted也有这两个参数),这里可直接使用convertTo函数执行:

original_image.convertTo(new_image, -1, alpha, beta);

取参数  和 :

对两幅图求和:addWeighted

公式为:

addWeighted( src1, alpha, src2, beta, gamma, dst);

alpha=0.7, beta=0.4:

单通道操作:split与merge

利用split可将多通道的Mat转化为一个vector对象,每个分量是原Mat的一个通道。

Mat image1=imread("image.jpg"), image2=imread("image2.jpg", 0), dest;
vector<Mat> planes;
split(image1, planes);
planes[2]+=image2;
merge(planes, dest);

绘图:Point与Scalar

Point数据结构表示了由其图像坐标  和  指定的2D点。Scalar表示具有4个元素的数组,此类型在OpenCV中被大量用于传递像素值,如果用不到第四个参数,则无需定义。

OpenCV中左上角为(0,0),向右x增大,向下y增大。

// point 1
Point pt;
pt.x = 10;
pt.y = 8;
// point 2
Point pt = Point(10, 8); //Scalar
Scalar s = Scalar( a, b, c );

查看OpenCV中以下函数的定义:line, ellipse, circle, fillPoly, polylines, rectangle, putText

基本上用Point定位,再用Scalar选择颜色即可。

随机数生成器

RNG rng( 0xFFFFFFFF );  //初始化
Point pt1;
pt1.x = rng.uniform( x_1, x_2 ); //产生[x_1, y_1)范围的随机数
pt1.y = rng.uniform( y_1, y_2 );
int icolor = (unsigned) rng;

几种简单的表示方法

// c[i]= a[i]+b[i];
cv::add(imageA,imageB,resultC);
// c[i]= a[i]+k;
cv::add(imageA,cv::Scalar(k),resultC);
// c[i]= k1*a[1]+k2*b[i]+k3;
cv::addWeighted(imageA,k1,imageB,k2,k3,resultC);
// c[i]= k*a[1]+b[i];
cv::scaleAdd(imageA,k,imageB,resultC);
// if (mask[i]) c[i]= a[i]+b[i]; mask必须是1-channel
cv::add(imageA,imageB,resultC,mask);

cv::saturate_cast<uchar>(aNumber)  如果aNumber小于0或着大于255,返回0或者255;如果aNumber是浮点数,返回最接近的整数。

作用在两张图片上的方法:

cv::subtract, cv::absdiff, cv::multiply, cv::divide, cv::bitwise_and, cv::bitwise_or, cv::bitwise_xor, cv::bitwise_not, cv::min, cv::max

作用在一张图片上的方法:

cv::sqrt, cv::pow, cv::abs, cv::cuberoot, cv::exp, cv::log.

被重载的方法:

the bitwise operators &,|, ^, ~, the min, max, and absfunctions, the comparison operators <, <=, ==,!=, >, >=; these later returning a 8-bit binary image. You will also find the matrix multiplication m1*m2(where m1and m2are both cv::Matinstances), matrix inversion m1.inv(), transpose m1.t(), determinant m1.determinant(), vector norm, v1.norm(), cross-product v1.cross(v2), dot product v1.dot(v2), and so on.

OpenCV学习笔记(四) Mat的简单操作的更多相关文章

  1. [OpenCV学习笔记2][Mat数据类型和操作]

    [Mat数据类型和基本操作] ®.运行环境:Linux(RedHat+OpenCV3.0) 1.Mat的作用: Mat类用于表示一个多维的单通道或者多通道的稠密数组.能够用来保存实数或复数的向量.矩阵 ...

  2. 【opencv学习笔记五】一个简单程序:图像读取与显示

    今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...

  3. OpenCV学习笔记:MAT解析

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

  4. OpenCV学习笔记:矩阵的掩码操作

    矩阵的掩码操作很简单.其思想是:根据掩码矩阵(也称作核)重新计算图像中每个像素的值.掩码矩阵中的值表示近邻像素值(包括该像素自身的值)对新像素值有多大影响.从数学观点看,我们用自己设置的权值,对像素邻 ...

  5. OpenCV学习笔记(十) 直方图操作

    直方图计算 直方图可以统计的不仅仅是颜色灰度, 它可以统计任何图像特征 (如 梯度, 方向等等).直方图的一些具体细节: dims: 需要统计的特征的数目, 在上例中, dims = 1 因为我们仅仅 ...

  6. 【opencv学习笔记四】opencv3.4.0图形用户接口highgui函数解析

    在笔记二中我们已经知道了,在highgui文件夹下的正是opencv图形用户接口功能结构,我们这篇博客所说的便是D:\Program Files\opencv340\opencv\build\incl ...

  7. OpenCV学习笔记四:ImgProc模块

    一,简介 这个模块包含一系列的常用图像处理算法. 二,分析 此模块包含的文件如下图: 其导出算法包括如下: /*********************** Background statistics ...

  8. SQL学习笔记四之MySQL数据操作

    阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操作: DML =========== ...

  9. pgloader 学习(四)一些简单操作例子

    上边已经说明了pgloader 的基本使用(篇理论),但是对于实际操作偏少,以下是一个简单的操作 不像官方文档那样,我为了方便,直接使用docker-compose 运行,同时这个环境,会在后边大部分 ...

  10. Python学习笔记3-文件的简单操作

    Python中的文件操作 Python中文件打操作离不开两个模块  os 和 shutil os:操作文件.目录: Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话, ...

随机推荐

  1. VS2008 Pocket PC 2003 SE VGA仿真程序网络设置

    最近对这个问题摸索的很久,都没有解决,今天终于搞定,现将大体设置步骤记录下来,以备回顾和方便别人查看,步骤如下: 1.打开VS2008,打开Windows Mobile设备中心(网上有下载). 2.连 ...

  2. iOS 力学动画生成器UIKit Dynamics 之碰撞效果讲解

    UIKit Dynamic是iOS7 新增的一组类和方法,可赋予UIView逼真的行为和特征,不需要写动画效果那些繁琐的代码,让开发人员能够轻松地改善应用的用户体验.一共有6个可用于定制UIDynam ...

  3. restesay部署学习过程中遇到的问题

    Exception starting filter org.jboss.resteasy.plugins.serer.servlet.Filter30Dispatcherjava.lang.Class ...

  4. Python参数基础

    Python参数基础 位置参数 ​ 通过位置进行匹配,把参数值传递给函数头部的参数名称,顺序从左到右 关键字参数 ​ 调用的时候使用参数的变量名,采用name=value的形式 默认参数 ​ 为没有传 ...

  5. xtrabackup支持的engine

    xtrabackup支持的engine 1.InnoDB/XtraDB Hot backup   2.MyISAM with read-lock   3.Archive,CSV with read-l ...

  6. UVA 12166 Equilibrium Mobile(贪心,反演)

    直接贪心.先想想最后平衡的时候,如果知道了总重量,那么每一个结点的重量其实也就确定了. 每个结点在左在右其实都不影响,只和层数有关.现在反过来,如果不修改某个结点,那么就可以计算出总质量,取总质量出现 ...

  7. 【洛谷2403】[SDOI2010] 所驼门王的宝藏(Tarjan+dfs遍历)

    点此看题面 大致题意: 一个由\(R*C\)间矩形宫室组成的宫殿中的\(N\)间宫室里埋藏着宝藏.由一间宫室到达另一间宫室只能通过传送门,且只有埋有宝藏的宫室才有传送门.传送门分为3种,分别可以到达同 ...

  8. 第九章 利用DOM脚本检索,替换,设置,追加样式信息

    我们浏览器里看到的网页是由以下三层信息构成的一个共同体: -结构层,由HTML或XHTML之类的标记语言负责去搭建文档的结构. -表示层,由CSS负责设置文档的呈现效果. -行为层,由JavaScri ...

  9. 初学HBase的几个问题

    转自 http://itindex.net/detail/50571-hbase-%E9%97%AE%E9%A2%98 本文主要针对对HBase不了解的人.主要想基于个人的理解回答以下几个问题: 什么 ...

  10. WPF实现ListView大小图标和分组

    XAML: <ListView Grid.Row="3" Name="t_lvw_time" HorizontalAlignment="Stre ...