目录

  • 说明
  • 导航
  • 正文
    • 一、图像数据读写
      • 1、Mat类
        • 构造Mat对象:
        • 读写Mat对象
      • 2、图像读取与显示
      • 3、视频与摄像头
      • 4、图像保存
      • 5、视频保存
      • 6、XML与YMAL文件
    • 二、图像基本操作
      • 1、颜色空间
        • 颜色模型转换
        • 图像数据类型转换
        • 多通道图像分离
        • 多通道图像合并
      • 2、像素操作
        • 寻找像素最大值/最小值
        • 矩阵转换,变形
        • 图像平均值,表示图像整体的亮暗
        • 标准差,表示图像明暗变化的程度,越大表示明暗变化越明显
        • 比较运算
        • 逻辑运算
        • 二值化,全局阈值
        • 二值化,自适应阈值
        • 查找表,灰度值映射表
      • 3、图像变换
        • 图像连接
        • 图像尺寸变换
        • 图像翻转变换
        • 图像仿射变换
        • 透视(投影)变换
        • 极坐标变换
      • 4、图像绘制
        • 绘制圆
        • 绘制直线
        • 绘制椭圆
        • 绘制矩形
        • 绘制多边形
        • 绘制文字
      • 5、感兴趣区域ROI
      • 6、图像金字塔

说明

本文主要是记录我在学习和使用OpenCV4过程中对常用算子的记录和简单描述,如描述有误请留言指正,我会持续进行完善!示例代码为C++编写,仅供参考。注意,为节省篇幅,函数中省略了参数类型和返回值,实际使用时参考opencv的接口说明即可!因版本不同而出现的接口和参数差异问题,请以具体版本为准,作者使用的opencv版本为最新版。

导航

OpenCV4图像处理算子不完全手册-进阶篇
OpenCV4图像处理算子不完全手册-应用篇

正文

一、图像数据读写

1、Mat类

构造Mat对象:

cv::Mat mat(row,column,type)//type为数据类型,如CV_8UC1,CV_8UC3,CV_16UC1,CV_16FC1等
cv::Mat mat(Size,type)//Size(row,column)
cv::Mat mat(row,column,type,Scalar)//Scalar(B,G,R)则图像为3通道,Scalar与type需对应
cv::Mat mat(const Mat& mat)//从已有的Mat矩阵拷贝
cv::Mat::zeros(Size(w,h),type)//构造大小为Size、值为0的矩阵

读写Mat对象

单通道图像:mat.at(row,column)
三(或多)通道图像:mat.at(row,column).val[num],num为通道索引,从0开始。

2、图像读取与显示

imread(filename,flags)//flags为图像形式,如彩色、灰度
nameWindow(winname,flags)//flags为窗口属性标志
imshow(winname,mat)

3、视频与摄像头

构造VideoCapture对象:

VideoCapture()
capture.open(filename)//filename为视频文件名称
capture.open(index)//index为相机索引,0为默认相机
VideoCapture(filename,apiPreference)//apiPreference为读取数据时设置的属性,如编码格式、是否调用OpenNI等
VideoCapture(index,apiPreference)
//读取帧
Mat fram;
//方法1,使用重载的运算符 >>
capture >> fram;
//方法2,使用read方法
capture.read(fram)  //成功返回true,否则返回false

4、图像保存

imwrite(filename,mat,params)//params为保存图片格式的属性设置标志,可将图像保存为指定格式

5、视频保存

构造VideoWriter对象:

VideoWriter()
VideoWriter(filename,fourcc,fps,framsize,isColor)//filename应包含视频格式(mp4、avi等),fourcc为压缩帧的4字符编解码器代码,fps为帧率,framsize为帧大小,isColoe是否彩色
//保存capture的帧
//方法1
writer.write(fram);
//方法2
writer << fram;

6、XML与YMAL文件

FileStorage对象:

FileStorage(filename,flags,encoding)//flags操作类型,encoding编码格式
FileStorage(),open(filename,flags,encoding)
write(filename,val)

当某个变量中含有多个数据或子变量时使用FileNode对象:

FileStorage Storage(filename,FileStorage::READ);
FileNode node = Storage["xxx"];
//FileNode迭代器
FileNodeIterator NodeIterator = node.begin();
//数组形式
node["xxxx"][index];

二、图像基本操作

1、颜色空间

颜色模型转换

cvtColor(src,dst,code,dstCn)

参数说明:
src 输入原始图像
dst 输出目标图像
code 颜色空间转换标志,如COLOR_BGR2RGB、COLOR_BGR2GRAY、COLOR_BGR2YUV等
dstCn 目标图像的通道数(默认0,自动确认通道数)

图像数据类型转换

convertTo(m,rtype,alpha,beta)

参数说明:
m 转换类型后输出的图像
rtype 目标数据类型,如CV_8U、CV_16U、CV_16F、CV_32F
alpha 缩放因子,默认1
beta 偏置因子,默认0

多通道图像分离

方式一:
split(src,mvbegin)//mvbegin为分离后的单通道图像数组,数组大小取决于src的通道数。
方式二:
split(m,mv)//mv为分离后的单通道图像向量(vector)

多通道图像合并

对应split方式一:
merge(mv,count,dst)//mv为需要合并的单通道图像数组,count为图像数组的长度,dst为输出的多通道数组。
对应split方式二:
merge(mv,dst)//mv为需要合并的单通道图像向量(vector)

2、像素操作

寻找像素最大值/最小值

minMaxLoc(src,minVal,maxVal,minLoc,maxLoc,mask)

参数说明:
minVal/maxVal 图像或矩阵中的最大/最小值
minLoc/maxLoc 图像或矩阵中最大/最小值所在的坐标位置
mask 掩模,用于在指定区域寻找最大/最小值,默认值为noArray()。

矩阵转换,变形

Mat::reshape(cn,rows)//cn为转换后的通道数(设置0则不变),rows为转换后的行数(设置0则不变)

图像平均值,表示图像整体的亮暗

mean(src,mask)//src为输入图像,mask为掩模,用于标记求取指定区域的平均值

标准差,表示图像明暗变化的程度,越大表示明暗变化越明显

该函数可用时求取平均值和标准差

meanStdDev(src,mean,stddev,mask)

参数说明:
mean为图像每个通道的平均值
stddev为图像每个通道的标准差
mask为掩模

比较运算

min(src1,src2,dst)//比较src1与src2,保留对应位置较小值到dst中。尺寸、通道数、数据类型一致
max(src1,src2,dst)//比较src1与src2,保留对应位置较大值到dst中

逻辑运算

bitwise_and(src1,src2,dst,mask)//与运算,mask掩模用于指定运算区域。尺寸、通道数、数据类型保持一致
bitwise_or(src1,src2,dst,mask)//或运算
bitwise_xor(src1,src2,dst,mask)//异或运算
bitwise_not(src1,src2,dst,mask)//非运算,等于取反

二值化,全局阈值

threshold(src,dst,thresh,maxval,type)

参数说明:
src为输入,只能是CV_8U或CV_32F类型
dst为输出,与src保持相同的尺寸、数据类型、通道数
thresh为阈值
maxval为二值化过程中的最大值
type为选择二值化方法的标志。

二值化,自适应阈值

adaptiveThreshold(src,dst,maxValue,adaptiveMethod,thresholdType,blockSize,C)

参数说明:
src 只能是CV_U8C1即单通道8bit类型
maxValue 为二值化的最大值
adaptiveMethod 为自适应阈值的方法,可选均值法、高斯法
thresholdType 为选择二值化方法的标志,可选THRESH_BINARY、THRESH_BINARY_INV
blockSize 为像素邻域大小(一般为奇数),如3、5、7
C为从平均值或加权平均值中减去的常数

查找表,灰度值映射表

LUT(src,lut,dst)//src必须为CV_8U类型;lut为256个像素灰度值的查找表,1x256大小的矩阵存放像素灰度值映射后的数值

3、图像变换

图像连接

vconcat(src,nsrc,dst)//src为Mat数组,nsrc为数组大小,纵向连接。
vconcat(src1,src2,dst)//将src1与src2连接合并到dst。
hconcat(src,nsrc,dst)//横向连接。
hconcat(src1,src2,dst)

图像尺寸变换

resize(src,dst,dsize,fx,fy,interpolation)

参数说明:
dsize为输出图像的尺寸,由Size(w,h)进行构造
fx为横轴的比例因子
fy为纵轴的比例因子
interpolation为插值方法标志,如最邻近、双线性、双三次等方法

图像翻转变换

flip(src,dst,flipCode)//flipCode为翻转方式标志,>0绕y轴翻转,=0绕x轴翻转,<0绕两个轴翻转

图像仿射变换

1、计算变换矩阵:

getRotationMatrix2D(center,angle,scale)//适用于图像旋转和缩放

center为旋转中心
angle为旋转角度
scale为两个轴的比例因子,可实现旋转过程中的缩放,1表示保持大小不变。
2、如果已知src与dst任意三个对应的点的坐标,可以计算对应的变换矩阵:

getAffineTransform(src[],dst[])

src[]为src图像中的三个点坐标的point2f数组
dst[]为dst图像中的三个点坐标的point2f数组
3、应用仿射变换

warpAffine(src,dst,M,dsize,flags,borderMode,borderValue)

M为从getRotationMatrix2D或getAffineTransform得到的2x3的变换矩阵
flags为插值方法标志
borderMode为像素边界外推方法标志
borderValue为填充边界的数值。

透视(投影)变换

1、计算变换矩阵:

getPerspectiveTransform(src[],dst[],solveMethod)

src[]是原图像中四个point2f类型的点坐标
dst[]是目标图像中四个point2f类型的点坐标
solveMethod为选择透视变换矩阵的方法。
2、应用透视变换

warpPerspective(src,dst,M,dsize,flags,borderMode,borderValue)

M为从getPerspectiveTransform中得到的3x3的变换矩阵
其他与仿射变换warpAffine相同。

极坐标变换

warpPolar(src,dst,dsize,center,maxRadius,flags)

dsize为目标图像大小
center为变换时极坐标的原点,一般指圆心
maxRadius为变换时边界元的半径,即圆形区域的半径
flags为插值方法与极坐标映射方法的标志

4、图像绘制

绘制圆

circle(img,center,radius,color,thickness,lineType,shift)

将圆绘制在img上
thinckness为圆的轮廓宽度(负值则绘制实心圆)
lineType为圆的边界类型
shift为中心坐标和半径数值的小数位数。

绘制直线

line(img,pt1,pt2,color,thickness,lineType,shift)//pt1和pt2为直线的起点和终点,数据类型为Point

绘制椭圆

ellipse(img,center,axes,angle,startAngle,endAngle,color,thickness,lineType,shift)

center为椭圆中心
axes为椭圆主轴大小的一半
angle为椭圆旋转的角度
startAngle为起始角度
endAngle为终止角度

绘制矩形

rectangle(img,pt1,pt2,color,thickness,lineType,shift)//pt1和pt2分别为矩形的左上角和右下角顶点
rectangle(img,rec,color,thickness,lineType,shift)//rec为事先定义好的Rect矩形

绘制多边形

fillPoly(img,pts,npts,ncontours,color,lineType,shift,offset)

pts为point**类型的多边形顶点数组
npts为每个多边形顶点数组中顶点的个数
ncontours为绘制多边形的个数
offset为可选的所有顶点的偏移

绘制文字

putText(img,text,org,fontFace,fontScale,color,thickness,lineType,bottomLeftOrigin)

text只支持英文
org为text的左下角坐标
fontFace为字体类型
fontScale为字体大小
bottomLeftOrigin指定图像数据原点的位置,默认false为左上角,true为右上角

5、感兴趣区域ROI

以矩形区域为例:
方法1、构造矩形,从原图中裁剪

Rect rect(x, y, w, h);  //定义ROI区域,坐标和宽高
Mat ROI1 = img(rect);  //裁剪,img为原图

方法2、构造mask矩阵,从原图中拷贝

Mat mask = Mat::zeros(Size(img.cols,img.rows), CV_8UC1);
for(int row = 100; row < noobcv.rows; row++)
{for(int col = 0; col < noobcv.cols; col++){mask .at<unsigned char>(row, col) = 1;//值为1的点,在原图中拷贝,值为0的不拷贝}
}
Mat ROI2;
img.copyTo(ROI2, mask);//以mask中值为1的点从img拷贝至ROI2,mask中值为0的点设置为0

6、图像金字塔

pyrDown(src, dst, dstsize, borderType)//图像下采样,即图像缩小,默认size缩小为1/2
pyrUp(src, dst, dstsize, borderType)//图像上采样,即图像放大,默认size则放大2倍

参数说明:
src, dst分别为输入图像、输出图像
dstsize为输出图像的size,使用默认值则dst为src的1/2大小
borderType为像素便捷外推方法

OpenCV4图像处理算子不完全手册-入门篇(已完结)相关推荐

  1. UE4-VR开发手册入门篇

    1.搭建UE4(虚幻4)引擎平台 注册Epic Game Luncher账号,并于服务器\\win-c:\Public_Raid\软件\UE4中将Epic GameLuncher安装在本地,由于国内网 ...

  2. Python学习笔记—低阶入门(已完结)

    目录 前言 注意 该不该学习Python(个人感受,纯属胡言论语) 基础知识:Python 的数据存储机制 第一章 Python基本语法 1.1 Python 数据类型 1.1.1 数值类型 1.1. ...

  3. OpenCV图像处理视频教程——入门篇(二)

    文章目录 10 膨胀与腐蚀 (1)形态学操作(morphology operators)--膨胀.腐蚀 (2)相关API (3)动态调整结构元素大小TrackBar 11 形态学操作 (1)开操作- ...

  4. 大话图像处理之入门篇

    本文从  http://c.biancheng.net/cpp/html/3077.html  转载而来.写的很深刻 最近有人问我图像处理怎么研究,怎么入门,怎么应用,我竟一时语塞.仔细想想,自己也搞 ...

  5. stm32f407手册_入门篇 | STM32F407库函数开发L按键控制Led灯

    让文化·去旅行 点击上方蓝字可以关注我们哦 按键控制灯的亮与灭的效果图: 一.寄存器开发与库函数开发的优缺点 1.寄存器开发 缺点: (1)开发难度大,查阅相关手册比较多 (2)开发效率相对低,产品周 ...

  6. 数字图像处理(入门篇)目录

    目录: 1  数字图像处理(入门篇)一 图像的数字化与表示 2 数字图像处理(入门篇)二 颜色空间 3 数字图像处理(入门篇)三 灰度化 4 数字图像处理(入门篇)四 像素关系 5 数字图像处理(入门 ...

  7. python机器人视觉编程——入门篇(下)

    目录 1 全篇概要 2 图像的读取与运算基础 2.1图像的读取 2.1.1 从磁盘的图像(.jpg,.npg,.gif等等)读取 2.1.2 从摄像头里读取图像 2.2图像的运算 2.2.1 图像的数 ...

  8. [Python图像处理] 一.图像处理基础知识及OpenCV入门函数

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  9. 后悔没早点看这篇直播系统定制开发入门篇

    直播想必大家都不陌生了,在互联网的风口下,以及5G技术的推动,流量带宽的提高,使得直播在我们生活中扮演着越来越重要的角色.本文先来讲一下入门直播需要了解的一些基本概念,搜集整理了直播入门需要了解的一些 ...

  10. 运动控制器编程_快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一

    点击上方"正运动小助手",随时关注新动态! 运动控制器ZHMI组态编程简介一  今天我们来学习一下,运动控制器的ZHMI组态编程简介.本文主要从产品概述.控制器连接触摸屏使用.HM ...

最新文章

  1. information_schema.routines 学习
  2. andriod 开发记录apidemos 错误解决
  3. 牛客练习赛46 B 华华送奕奕小礼物 (预处理前缀和,二分)
  4. .net html转为pdf,.NET使用DinkToPdf将HTML转成PDF的示例代码
  5. matlab实现图片区水印,怎么在含有水印的图像中提取出水印
  6. 阿里巴巴超大规模Kubernetes基础设施运维体系解读
  7. C++高质量编程点滴
  8. Java json拼接字符串_Java中拼接json格式字符串
  9. [转载] 吴恩达机器学习逻辑回归练习题:逻辑回归及规则化(python实现)
  10. 监狱人员安全防范管理系统软件解决方案
  11. Win10右下角没有英特尔显卡设置图标怎么办?
  12. 华为云MySQL云数据库,轻松助力数据上云
  13. 怎么进入修复计算机界面,开机进入启动修复界面不能启动win7电脑的修复办法...
  14. python-Excel多个表格合并
  15. 懂车帝新能源汽车销量分析
  16. C语言关于有符号和无符号变量相互赋值的探讨
  17. linux 调整cpu使用率,linux下限制CPU使用率的3种方法
  18. sqlmap写入一句话木马
  19. Leetcode初级算法
  20. java仿QQ聊天软件OIM艰辛之路

热门文章

  1. 分享一位大佬开发的驱动级的虚拟键盘鼠标,支持DD键鼠接口
  2. 如何对计算机进行硬盘的分区,使用分区助手如何对磁盘进行快速分区?
  3. Type-C接口技术(一)
  4. sierpinski三角形的维数_遥感图象分形维数的几种估计算法研究
  5. Unity UI框架思路与实现
  6. Python文本分析 jieba
  7. XJOI恺撒加密术1级19段
  8. 鸿蒙系统图标大小怎么调节,华为手机桌面图标大小怎么调?用华为手机的朋友这些技巧需要了解...
  9. Ubuntu 18.04 如何调整桌面图标大小
  10. oracle 数据库 双机,oracle双机热备份方法