OpenCV学习笔记二Word下载.docx
- 文档编号:21632620
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:15
- 大小:1.26MB
OpenCV学习笔记二Word下载.docx
《OpenCV学习笔记二Word下载.docx》由会员分享,可在线阅读,更多相关《OpenCV学习笔记二Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
内核B有一个可定义的锚点,通常定义为内核中心点。
进行膨胀操作时,将内核B划过图像,将内核B覆盖区域的最大相素值提取,并代替锚点位置的相素。
显然,这一最大化操作将会导致图像中的亮区开始”扩展”(因此有了术语膨胀dilation)
voiddilate(InputArraysrc,OutputArraydst,InputArraykernel,Pointanchor=Point(-1,-1),intiterations=1,intborderType=BORDER_CONSTANT,constScalar&
2
开运算(Opening)
开运算是通过先对图像腐蚀再膨胀实现的。
dst=open(src,element)=dilate(erode(src,element))
能够排除小团块物体(假设物体较背景明亮)
闭运算(Closing)
闭运算是通过先对图像膨胀再腐蚀实现的。
dst=close(src,element)=erode(dilate(src,element))
能够排除小型黑洞(黑色区域)。
形态梯度(MorphologicalGradient)
膨胀图与腐蚀图之差
dst=morph_{grad}(src,element)=dilate(src,element)-erode(src,element
顶帽(TopHat)
原图像与开运算结果图之差
dst=tophat(src,element)=src-open(src,element)
黑帽(BlackHat)
闭运算结果图与原图像之差
dst=blackhat(src,element)=close(src,element)–src
六图像的放大和缩小
图像金字塔(ImagePyramids)
一个图像金字塔是一系列图像的集合-所有图像来源于同一张原始图像-通过梯次向下采样获得,直到达到某个终止条件才停止采样。
有两种类型的图像金字塔常常出现在文献和应用中:
高斯金字塔(Gaussianpyramid):
用来向下采样
拉普拉斯金字塔(Laplacianpyramid):
用来从金字塔低层图像重建上层未采样图像
向下采样导致了,图像放大,造成模糊
向上采样会导致丢失信息,因为他缩小了图像
向上采用函数原型:
voidpyrUp(InputArraysrc,OutputArraydst,constSize&
dstsize=Size(),intborderType=BORDER_DEFAULT)
向下采用函数原型:
voidpyrDown(InputArraysrc,OutputArraydst,constSize&
实例:
//将图像放大两倍
pyrUp(src,dst,Size(src.cols*2,src.rows*2));
//缩小两倍
pyrDown(src,dst,Size(src.cols/2,src.rows/2));
七图像修复
图像修复
图像的修复是重建图像和视频受损部分的过程,这个过程也成为图像或视频的插值。
OpenCV2.4版本支持一种修复算法,函数的模型为:
voidinpaint(InputArraysrc,InputArrayinpaintMask,OutputArraydst,doubleinpaintRadius,intflags)
Parameters:
src:
输入的图像8-bit1通道或3通道
inpaintMask:
图像的掩码,8-bit1-channelimage.
dst:
输出图像
inpaintRadius:
表示有flags所制定的算法可以使用的邻域
flag:
有两种方式
1.INPAINT_NS:
该方法是基于Navier-Stokes方法
2.INPAINT_TELEA:
该方法是抑郁AlexandruTelea提出的算法
如果不知道图像的掩码,则去获得它的掩码挺复杂的,应该你并不知道,什么情况下才是最优的,只能去实验。
更具阈值去获得图像掩码:
doublethreshold(InputArraysrc,OutputArraydst,doublethresh,doublemaxval,inttype)
其中thresh为所要设置的阈值
maxval为
type以什么形式设置阈值。
type的方式如下图所示:
这里选用的是二值的方式,即当src(x,y)>
thresh时,将其设为maxval.
一个实例:
这个例子中获得的不是很好的掩码,掩码的选择可能更为的复杂。
#include"
opencv2/opencv.hpp"
#include<
iostream>
iomanip>
usingnamespacecv;
usingnamespacestd;
intmain(intargc,char**argv){
//Readthesourcefile
Matsrc;
src=imread("
3.jpg"
);
//Createthemask
Matmask;
cvtColor(src,mask,COLOR_RGB2GRAY);
//将其转换成灰度图像,因为掩码必须是一维的
/*for(inti=0;
i<
mask.rows;
i++){
for(intj=0;
j<
mask.cols;
j++)
cout<
<
int(mask.at<
uchar>
(i,j))<
setw(4);
endl;
}*/
(mask.rows/2,mask.cols/2))<
endl;
threshold(mask,mask,190,255,THRESH_BINARY);
//Applytheinpaintingalgorithms
Matdst,dst2;
inpaint(src,mask,dst,10,INPAINT_TELEA);
inpaint(src,mask,dst2,10,INPAINT_NS);
//Showtheresults
namedWindow("
ORIGINAL"
WINDOW_AUTOSIZE);
imshow("
src);
MASK"
mask);
INPAINT_TELEA"
dst);
INPAINT_NS"
dst2);
waitKey();
return0;
}
八颜色处理
颜色空间
要用三种或更多的特征来指定一种颜色,有许多的方法被称为颜色空间或者颜色模型。
如何选取其中一种方法来表示一副图像要依赖于执行的运算。
不同的颜色空间的转换,Opencv提供方法
voidcvtColor(InputArraysrc,Outputdst,intcode,intdstCn=0)
code:
这是颜色空间的转换代码。
例如COLOR_BGR2GRAY
dstCn:
这是目标图形的通道数,如果为0或省略,则通道数有src和code自动产生。
常用的颜色空间:
RGB颜色空间
在RGB中,一幅图像有三个独立的图像平面或通道组成:
红,绿,蓝(以及第四个通道透明度)。
如下代码展示了,加载RGB图像,并在灰度空间和颜色空间中拆分并显示每个特定的通道。
voidsplit(InputArraym,OutputArrayOfArraysmv)
1.将图像的每个通道保存在mv中
2.mv声明为vectormv
voidmerge(InputArrayOfArraysmv,OutputArraydst)
1.将mv和并称一个图像dst
opencv2/opencv_modules.hpp"
opencv2/highgui/highgui.hpp"
vector<
Mat>
showSeqratedChannels(vector<
channels);
intmain(){
Matimage=imread("
test.jpg"
vector<
channels;
split(image,channels);
//分割图像
//用灰度级显示通道
Origin"
WINDOW_NORMAL);
image);
Bluechannel"
WINDOW_NORMAL);
channels[0]);
Greenchannel"
channels[1]);
Redchannel"
channels[2]);
channels.size()<
//显示BGR中的通道
separated=showSeqratedChannels(channels);
separated[0]);
separated[1]);
separated[2]);
separated[0].size()<
separated[0].rows<
separated[0].cols<
//这个函数,将channels中的每个波段分别加上两个波段,形参三个RGB通道
//其余两个通道介入的都是0像素。
channels){
atedChannels;
for(inti=0;
3;
Matzero=Mat:
:
zeros(channels[0].rows,channels[0].cols,channels[0].type());
aux;
j++){
if(j==i)aux.push_back(channels[i]);
else
aux.push_back(zero);
}
Matchann;
merge(aux,chann);
//chann为输出的容器
seqaratedChannels.push_back(chann);
returnseqaratedChannels;
灰度图像与RGB图像的转变。
RGB[A]转换为灰度:
Y=0.299*R+0.587*G+0.114*B;
用cvtColor方法的缺陷就是是的原始图像的对比度丢失,从上面的式子中可以看到。
//利用opencv函数将彩色变为灰度图像
cvtColor(image,imageGray,COLOR_BGR2GRAY);
CIEXYZ颜色空间
CIEXYZ系统用一个亮度分类Y来描述颜色,他与人类视觉的亮度灵敏度和两个附加通道X,Z相关。
RGB和CIEXYZ之间的转换颜色空间代码是:
COLOR_BGR2XYZ
COLOR_RGB2XYZ
COLOR_XYZ2BGR
COLOR_XYZ2RGB
cute.jpg"
cvtColor(image,image,CV_BGR2XYZ);
Origin_XYZ"
Bluechannel_GRAY"
WINDOW_AUTOSIZE);
Greenchannel_GRAY"
Redchannel_GRAY"
////显示BGR中的通道
cvtColor(separated[i],separated[i],COLOR_XYZ2BGR);
//在将其转成BGR中显示通道
seqaratedChannels;
YCrCb颜色空间
该颜色空间广泛的用于视频压缩和图像压缩方案,不能算是纯粹的颜色空间,因为它是RGB颜色空间的一种解码方式。
该颜色空间广泛的应用于MPEG和JPEG等视频和图像压缩方案。
Y表示亮度
Cr:
RGB空间R通道和Y差值
Cb:
RGB空间B通道和Y差值
RGB和YCrCb之间的转换颜色空间代码是:
COLOR_BGR2YCrCb
COLOR_RGB2YCrCb
COLOR_YCrCb2BGR
COLOR_YCrCb2RGB
计算的过程如下图所示:
同理,将一副RGB图像转换成YCrCb空间,以及在灰度空间和颜色空间中拆分并显示特定通道代码同上述非常类似,因此不再重复。
效果如下图所示:
HSV颜色空间
HSV颜色空间属于面向色度的颜色坐标系的一种,这种颜色模型接近于人类颜色感知的仿真模型,而在其他颜色模型中,例如RGB,一副图像被视为3中基色的叠加。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenCV 学习 笔记