- 说明
- 导航
- 正文
- 图像数据读写
- 1、Mat类
- 2、图像读取与显示
- 3、视频与摄像头
- 4、图像保存
- 5、视频保存
- 6、XML与YMAL文件
- 图像基本操作
- 1、颜色空间
- 颜色模型转换
- 图像数据类型转换
- 多通道图像分离
- 多通道图像合并
- 2、像素操作
- 像素最大/最小值
- 矩阵转换(重置)
- 平均值
- 标准差
- 比较运算
- 逻辑运算
- 全局阈值
- 自适应阈值
- 查找表
- 3、图像变换
- 图像连接
- 尺寸变换
- 翻转变换
- 仿射变换
- 透视变换
- 极坐标变换
- 4、图像绘制
- 绘制圆
- 绘制直线
- 绘制椭圆
- 绘制矩形
- 绘制多边形
- 绘制文字
- 感兴趣区域ROI
本文主要是记录我在学习和使用OpenCV4过程中对常用算子的记录和简单描述,如描述有误请留言指正!示例代码使用C++编写,仅供参考,不可直接使用!
导航OpenCV4图像处理算子不完全手册-进阶篇
OpenCV4图像处理算子不完全手册-应用篇
构造Mat对象:
cv::Mat mat(row,column,type)
cv::Mat mat(row,column,type,Scalar)
cv::Mat mat(Size,type)
cv::Mat mat(const Mat& mat)
读写Mat对象
单通道图像mat.at(row,column)
多(三)通道图像mat.at(row,column).val[num],num的值为0~2
imread(filename,flags)
nameWindow(winname,flags)
imshow(winname,mat)
构造VideoCapture对象:
VideoCapture(),capture.open(filename),capture.open(index),index为相机索引,0为默认相机
VideoCapture(filename,apiPreference)
VideoCapture(index,apiPreference)
//读取帧 Mat fram; //方法1 capture >> fram; //方法2 capture.read(fram) //成功返回true,否则返回false4、图像保存
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颜色空间转换标志,dstCn目标图像的通道数(默认0)。
图像数据类型转换convertTo(m,rtype,alpha,beta),m转换类型后输出的图像,rtype目标数据类型,alpha缩放因子,beta偏置因子。
多通道图像分离split(src,mvbegin),mvbegin为分离后的单通道图像数组,数组大小取决于src的通道数。
split(m,mv),mv为分离后的单通道图像向量(vector)
merge(mv,count,dst),mv为需要合并的单通道图像数组,count为图像数组的长度,dst为输出的多通道数组。
merge(mv,dst),mv为需要合并的单通道图像向量(vector)
minMaxLoc(src,minVal,maxVal,minLoc,maxLoc,mask),minVal/maxVal图像或矩阵中的最大/最小值,minLoc/maxLoc图像或矩阵中最大/最小值所在的坐标位置,mask用于在指定区域寻找最大/最小值。
矩阵转换(重置)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),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类型,thresh为阈值,maxval为二值化过程中的最大值,type为选择二值化方法的标志。
自适应阈值adaptiveThreshold(src,dst,maxValue,adaptiveMethod,thresholdType,blockSize,C),src只能是CV_U8C1类型,maxValue为二值化的最大值,adaptiveMethod为自适应阈值的方法,thresholdType为选择二值化方法的标志,blockSize为像素邻域大小(一般为奇数),C为从平均值或加权平均值中减去的常数。
查找表LUT(src,lut,dst),src必须为CV_8U类型,lut为256个像素灰度值的查找表
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为输出图像的尺寸,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中得到的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为右上角。
感兴趣区域ROI


