赞
踩
本文主要是记录我在学习和使用OpenCV4过程中对常用算子的记录和简单描述,如描述有误请留言指正,我会持续进行完善!示例代码为C++编写,仅供参考。注意,为节省篇幅,函数中省略了参数类型和返回值,实际使用时参考opencv的接口说明即可!因版本不同而出现的接口和参数差异问题,请以具体版本为准,作者使用的opencv版本为最新版。
OpenCV4图像处理算子不完全手册-进阶篇
OpenCV4图像处理算子不完全手册-应用篇
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.at(row,column)
三(或多)通道图像:mat.at(row,column).val[num],num为通道索引,从0开始。
imread(filename,flags)//flags为图像形式,如彩色、灰度
nameWindow(winname,flags)//flags为窗口属性标志
imshow(winname,mat)
构造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
imwrite(filename,mat,params)//params为保存图片格式的属性设置标志,可将图像保存为指定格式
构造VideoWriter对象:
VideoWriter()
VideoWriter(filename,fourcc,fps,framsize,isColor)//filename应包含视频格式(mp4、avi等),fourcc为压缩帧的4字符编解码器代码,fps为帧率,framsize为帧大小,isColoe是否彩色
//保存capture的帧
//方法1
writer.write(fram);
//方法2
writer << fram;
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];
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)
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大小的矩阵存放像素灰度值映射后的数值
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为插值方法与极坐标映射方法的标志
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为右上角
以矩形区域为例:
方法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
pyrDown(src, dst, dstsize, borderType)//图像下采样,即图像缩小,默认size缩小为1/2
pyrUp(src, dst, dstsize, borderType)//图像上采样,即图像放大,默认size则放大2倍
参数说明:
src, dst分别为输入图像、输出图像
dstsize为输出图像的size,使用默认值则dst为src的1/2大小
borderType为像素便捷外推方法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。