还剩21页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
第1章.在自己的计算机中安装配置Anaconda和OpenCV的开发环境略.完成读取指定图片,显示并保存的程序importcvlena=cv
2.imread/zlena.bmp/zcv
2.imshowimage”lenacv
2.waitKeycv
2.destroyAlIWindowsOr=cv
2.imwriteCresult.bmpz/lena.在自己的计算机中安装配置OpenCV贡献库略第2章.筒述二值图像、灰度图像和彩色的区别二值图像也称单色图像或者1位图像,以及颜色深度为1的图像,它也是仅仅包含黑色和白色两种颜色的图像二值图像的表示方法简单便捷,但是因为其仅有黑、白两种颜色,所表示的图像不够细腻如果想要表现更多的细节,就需要使用更多的颜色灰度图像是包含灰度级(亮度)的图像,通常,计算机会将灰度处理为256个灰度级,用数值区间
[0255]来表示相比二值图像和灰度图像,彩色图像是更常见的一类图像,它能表现出更丰富的细节信息以常用的RGB色彩空间为例,在RGB色彩空间中,有R(red红色)通道、G(green绿色)通道和B(blue蓝色)通道,共三个通道.16bit深度的彩色图像可以表示多少种颜色?如果有一幅256X256像素的16bit的深度的彩色图像,其数据大小是多少字节.编写程序,读入一幅图像,计算并显示其直方图importcv2importmatplotlib.pyplotaspitimg=cv
2.imreadz,lena.bmpz,0cv
2.imshoworiginal”imgpit.histimg.ravel256cv
2.waitKeycv
2.dcstroyAlIWindows.为什么在一般情况下对离散图像的直方图均衡化并不能产生完全平坦的直方图?理由是
(1)直方图是近似概率密度函数,
(2)筒并现象的存在使处理的灰度级总是要减少的这是像素灰度有限的必然结果均衡化只是近似的其结果只能是产生近似均匀的直方图.编写程序,读入一幅图像,对其进行直方图均衡化,并画出处理前后的直方图importcv2importmatplotlib.pyplotaspitimg=cv
2.imreadJlena.bmp0equ=cv
2.equalizeHistimgcv
2.imshowz,originar\imgcv
2.imshowresult”equpit.figure〃原始图像直方图〃pit.histimg.ravel256pit.figure〃均衡化结果直方图〃pit.histequ.ravel256cv
2.waitKeycv
2.destroyAl1Windows.编写程序,利用绘制线段函数,在一幅图像上绘制一个三角形importcv2n二400img=cv
2.imread,,lena.bmpz,img=cv
2.lineimg00nn255003img=cv
2.lineimg0nnn255003img=cv
2.lineimg000n255003cv
2.imshowz/imgz,imgv
2.waitKeycv
2.destroyAlIWindows.编写程序,利用多边形绘制函数,在--幅图像上绘制一个三角形importnumpyasnpimportcv2img=cv
2.imreacK^lena.bmpz/pts=np.array[
[00]
[400400]
[0400]]np.int32#生成各个顶点,注意数据类型为int32pts=pts.reshape-112#第1个参数为-1表明它未设置具体值,它所表示的维度值是通过其他参数值计算得到的cv
2.polylinesimg[pts]True025508#调用函数cv
2.polylines完成多边形绘图注意,第3个参数控制多边形是否封闭cv
2.imshow〃img〃,imgcv
2.waitKeycv
2.destroyAlIWindowsO
3.编写程序,在一幅图像上绘制圆圈,并在圆中绘制文字importcv2d=400img=cv
2.imread,zlena.bmp,zcenterXcenterY=roundimg.shape[l]/2»roundimg.shape
[0]/2red=00255cv
2.circleimgcenterXcenterY200red3font=cv
2.FONTHERSHEYSIMPLEX.putTextimgLena100200font302550cv
2.putTextimgLena100200font3cv
2.waitKeycv
2.destroyAlIWindows第10章.一幅原始尺寸为512*512的图像,最多可以生成多少层的图像金字塔512-256-128-64-32-16-8-4-2-〉1共9层图像金字塔.编写程序,使用函数cv
2.pyrDown对一幅图像进行向下采样至原始大小的16分之1并显示importcv2img=cv
2.imreadUlena.bmp”cv
2.IMREADGRAYSCALErl=cv
2.pyrDownimgrl=cv
2.pyrDownrlrl=cv
2.pyrDownrlrl=cv
2.pyrDownrlcv
2.imshoworiginal”imgcv
2.imshowCrl,zrlcv
2.waitKeycv
2.destroyAlIWindows
0.编写程序,使用函数c\2pyrUp对一幅图像进行向上采样至原始大小的8倍,并显示importcv2img=cv
2.imreadz,lena-small.bmp^cv
2.IMREADGRAYSCALErl=cv
2.pyrUpimgrl=cv
2.pyrUprlrl=cv
2.pyrUprlcv
2.imshow〃rl〃,rlcv
2.waitKeycv
2.destroyAlIWindows0第11章.编写程序,使用Harris角点检测方法对自然图像进行角点检测importcv2importnumpyasn filename=lena.bmpimg=cv
2.imreadfilenamegray=cv
2.cvtColorimgcv
2.COLOR.BGR2GRAYgray=np.float32graydst=cv
2.cornerHarrisgray23004det=cv
2.dilatedstNoneimg[dst
0.01*dst.max]=
[00255]cv
2.namedWindow,image,cv
2.WINDOWNORMALcv
2.imshow,imageimgcv
2.waitKey0cv
2.destroyAl1Windows.编写程序,对同一幅图像,比较SIFT和SURF抽取特征的时间importnumpyasnpimporttiimportcv2img=cv
2.imreadlena.bmpgray=cv
2.cvtColorimgcv
2.COLORBGR2GRAYstarttime=time.timesift=cv
2.xfeatures2d.SIFTcreatekp=siftdetectgrayNone#使用关键点找出sift特征向量des=siftcomputegraykpendtime二timetimeprintendtimestarttimeret=cv
2.drawKeypointsgraykpimgcv
2.imshow,retretcv
2.waitKey0cv
2.destroyAHWindowsstarttime=time.timeurf=cv
2.xfeatures2d.SURFcreate400#SURFHessian的阈kpdes=surf.detectAndComputeimgNone#寻找关键endtime=time.timeprintendtimestarttimev
2.drawKeypointsimgimgflags=cv
2.DRAWMATCHESFLAGSDRAW^RICHKEYPOINTS幽会制关键点cv
2.imshow/zimg/zimgcv
2.waitKeycv
2.destroyAlIWindows.编写程序,对两幅图像进行SIFT特征检测并做k近邻匹配importnumpyasnimportcvimgl=cv
2.imread/zhouse
1.bmpz,cv
2.IMREADGRAYSCALEimg2=cv
2.imreadz,house
2.bmpz,cv
2.IMREADGRAYSCALEsiftl=cv
2.xfeatures2d.SIFTcreateOkpldesl=siftl.computeimglkplsift2=cv
2.xfeatures2d.SIFTcreatekp2des2=sift
2.computeimg2kp2bf=cv
2.BFMatchercv
2.NORML1crossCheck=Falsematches=bf.knnMatchsamplesample2k=limg3=cv
2.drawMatchesKnnimglkplimg2kp2matchesimg2flags=2cv
2.imshowresult”img3cv
2.imwrite,zmatchingresult
2.jpg”img3cv
2.waitKeycv
2.destroyAllWindows第12章.简述积分图像快速计算Haar特征的原理和计算方法,并编写程序实现对于一个灰度图像I而言,其积分图ii也是一张与I尺寸相同的图,只不过该图上任意一点xy的值是指从灰度图像I的左上角与当前点所围成的矩形区域内所有像素点灰度值之和积分图构造好之后,图像中任何矩阵区域的像素累加和都可以通过简单运算得到importcv2importnumpyasnpimgl=cv
2.imread,lena.bmpintegl=cv
2.integralimgl#计算积分图integl=integl/np.maxintegl*255#转为0~255的uint8类型方便画integl=np.arrayintegldtype二〃uint8〃cv
2.namedWindow,iingT0cv
2.imshow,imgTimglcv
2.namedWindow,integT0cv
2.imshow,integTinteglcv
2.waitKey0cv
2.destroyAHWindows.编写程序,使用EigenFishfaces实现人脸识别importcv2importnumpyasimages=[]imagesappendcv
2.imreadz,faces-training/g
1.bmpcv
2.IMREADGRAYSCALEimagesappendcv
2.imreadz,faces-training/g
2.bmp/zcv
2.IMREADGRAYSCALEimagesappendcv
2.imreadz/faces-1raining/s
1.bmp”cv
2.IMREADGRAYSCALEimagesappendcv
2.imreadz/faces-training/s
2.bmp”cv
2.IMREADGRAYSCALElabels=
[0011]recognizer=cv
2.face.EigenFaceRecognizercreaterecognizertrainimagesnp.arraylabelspredictimage=cv
2.imread,zfaces-training/g
3.bmpz,cv
2.IMREADGRAYSCALElabelconfidence=recognizerpredictpredictimageprint/zlabel=,/labelprintconfidence二〃confidence第13章.简述HOG特征的原理和计算方法,并比较与其他特征的优缺点HOG的基本思想就是对检测窗口在图像中滑动进行分割以形成块Block和单元格Cell然后计算每个像素的梯度包括方向和幅值,再以块为单位统计每个单元格的加权直方图,最后将各个单元格和块内的直方图进行级联形成HOG描述符优点lHOG表示的是边缘梯度的结构特征,因此可以描述局部的形状信息;2位置和方向空间的量化一定程度上可以抑制平移和旋转带来的影响;3采取在局部区域归一化直方图,可以部分抵消光照变化带来的影响;4由于一定程度忽略了光照颜色对图像造成的影响,使得图像所需要的表征数据的维度降低了;5而且由于这种分块分单元的处理方法,也使得图像局部像素点之间的关系可以很好得到表征缺点1描述符生成过程冗长,导致速度慢,实时性差;批注〔11]描述符2很难处理遮挡问题;3由于梯度的性质,该描述符对噪点相当敏感.编写程序,比较使用和不使用非极大值抑制做行人检测的效果importcv2importnumpyasnpcv
2.ocl.setUseOpenCLFalsesrc=cv
2.imreacK^xingren.jpg〃hog=cv
2.HOGDescriptorhog.setSVMDetectorcv
2.HOGDescriptorgetDefauItPeop1eDetector#检测图片中的行人16bit深度的彩色图像可以表示216*216*216=2-48=281474976710656种颜色;一幅256X256像素的16bit的深度的彩色图像的数据大小是256*256*16*3/8=393216字节.编写一个程序,要求读取一幅灰度图像,并对其像素值进行访问、修改importcv2img=cv
2.imread/zlena.bmp,z0cv
2.imshoworiginal”imgforiinrange40200:forjinrange160200:cv
2.imshow〃modified〃,imgcv
2.waitKeycv
2.destroi^AHWindows
0.编写一个程序,生成一幅彩色图像,让其中的像素值均为随机数importnumpyasimportcv2img=np.randomrandint0256size=
[2562563]dtype=np.uint8cv
2.imshowimage”imgcv
2.waitKeycv
2.destroyAHWindowsO第3章图像的位运算可以分为哪几类
1.图像的位运算有按位与、按位或、按位异或、按位取反winStride=24padding=88scale=l.2useMeanshiftGrouping=Falseorxywhinrects:cv
2.rectanglesrcxyx+wy+h025502cv
2.imshow,,hog-detectorl/,srcinStride=24padding=88scale=l.2useMeanshiftGrouping=Trueforxywhinrects:cv
2.rectanglesrcxyx+wy+h025502cv
2.imshowC/hog-detector2,zsrccv
2.waitKey0cv
2.destroyAHWindows第14章.简述网络爬虫的工作流程网络爬虫的主要思想是模拟人的浏览操作,在这种模拟的基础上,解析网页并提取数据网络爬虫的具体工作流程如下首先选取一部分精心挑选的种子URL(网络地址)开始抓取Pyhon语言提供了很多类似的函数库或框架,如uilib、reguestsscrapy等,通过模拟真实用户浏览网页行为获取URL所对应网页然后,将这些URL放入待抓取URL队列通过对上一步获取的网页代码进行解析,可以通过re(正则表达式)BeaoifulSoup4sHTMLParser等函数库来处理,提取出一系列的URL和目标数据这些URL会被网络爬虫加入到待抓取的URL列表中,而感兴趣的数据则被保存到指定位置接下来,从待抓取URL队列中取出待抓取在URL解析DNS并且得到主机的ip并将URL对应的网页下载下来,存储进已下载网页库中此外,将这些URL放进已抓取URL队列最后,从上一步获取到的网页中提取URL和目标数据,URL加入到待抓取列表中等待下一次网络爬虫访问,目标数据则保存到指定位置,从而进入下一个循环.编写程序,自己寻找一些带图片的网页,爬取网页上的图片并下载importrequestsfrombs4importBeautifulSoupurl=,https://tieba.baidu.com/p/6045474546,header={User-Agent”:z,Mozilla/
5.0Windows
10.0;Win64;x64;rv:
70.0Gecko/20100101Firefox/
70.0〃}r=requestsgeturlheaders=headerinfo=r.textsoup=BeautifulSoupinfohtml.parserallimg=soup.findallimgclass=,BDEImage,forindeximginenumerateallimg:src=imgfsrc]url=strindex+l+”.jpg”r=requestsgetsrcwithopenurlwbasf:f.writer.contentprint〃下载完/d张了...〃%index+l第15章.简述常规的数据标注流程常规的数据标注流程包括数据采集、数据清洗、数据标注、数据质检等环节.自己定义一个多边形标注任务,利用LabelMe进行标注略第16章
1.使用带摄像头的计算机,编写摄像头捕捉程序,并保存视频importnunipyasimportcv2cap=cv
2.VideoCapture0fourcc=cv
2.VideoWriterfourccI42Oout=cv
2.VideoWriter,output.avifourcc20640480whilecap.isOpened:retframe=cap.readifret=True:out.writeframecv
2.imshowframeframeifcv
2.waitKey1==27:p.re1easet.releasecv
2.destroyAHWindows
2.尝试编写视频处理程序,做动态的人脸检测importcvcv
2.ocl.setUseOpenCLFalsecap=cv
2.VideoCapture0faceengine:cv
2.CascadeClassifiercv
2.data.haarcascades+,haarcascadefrontalfacedefaretframe=cap.readfacesfaceengine.detectMultiScaleframescaleFactor=l.3ininNeighbors=5forxywhinfaces:frame=cv
2.rectangleframexyx+wy+h255002cv
2.imshow,imgframeifcv
2.waitKeyl==ord,q:breakcv
2.destroyAlIWindows.编写程序,使用随机数数组模拟灰度图像,观察使用“+”对像素值求和的结果.编写程序,使用函数cv
2.addWeightedO将一幅图像的感兴趣区域(R0I)混合在另外一幅图像内importcv2importnumpyasimg=cv
2.imread/zlena.bmp/z1dst=imgwhc=img.shapemask=np.zeroswhdtype=np.uint8mask[100:300200:400]二255mask[100:400100:300]=255dst=cv
2.bitwiseandimgimgmask=maskimg2=cv
2.imread〃sky.bmp〃,1result=cv
2.addWeightedimg
0.6img
20.40cv
2.imshowresult”resultcv
2.waitKeycv
2.destroyA11Windows
4.编写程序,构造一个正方形掩模图像,将该掩模图像作为按位与函数的掩模参数,实现保留图像的指定部分importcvimportnumpyasimg=cv
2.imread/zlena.bmp/z1dst=imgwhc=img.shapemask=np.zeroswhdtype=np.uint8k[100:300200:400]=25st=cv
2.bitwiseandimgimgmask=maskcv
2.imshowimg”imgcv
2.imshow〃mask〃,maskcv
2.imshow〃dst〃,dstcv
2.waitKey0cv
2.destroyAHWindows第4章.什么是三原色原理?白光通过棱镜后被分解成多种颜色逐渐过渡的色谱,颜色依次为红、橙、黄、绿、青、蓝、紫,这就是可见光谱其中人眼对红、绿、蓝最为敏感,人的眼睛就像一个三色接收器的体系,大多数的颜色可以通过红、绿、蓝三色按照不同的比例合成产生同样绝大多数单色光也可以分解成红绿蓝三种色光这是色度学的最基本原理,即三基色原理.在RGB彩色系统中,每个RGB分量图像是一幅8位图像,共有多少不同的彩色级2小*2-8*2-8=16777216种彩色.编写程序,将图像在BGR和RGB色彩空间之间相互转换importlena=cv
2.imreadClena.bmp,zrgblmage=cv
2.cvtColorlenacv
2.COLORBGR2RGBcv
2.imshow,zbgr,zlenacv
2.imshow,,rgb,,rgblmagecv
2.waitKeycv
2.destroyAl1Windows.编写程序,调整HSV色彩空间内V通道的值,观察其处理结果importcv2img=cv
2.imread〃lena.bmp〃hsv=cv
2.cvtColorimgcv
2.COLORBGR2HSVsv=cv
2.splithsvv=v-100hsv2=cv
2.merge[hsv]img2=cv
2.cvtColorhsv2cv
2.C0L0RJISV2BGRcv
2.imshow,,img,,>imgcv
2.imshowimg2”img2cv
2.waitKeycv
2.destroyAllWindows第5章.图像有哪几种常见的几何变换?常见的几何变换有缩放、翻转、仿射变换、透视、重映射等.图像旋转会引起图像失真吗,为什么?图像旋转会引起图像失真,因为图像旋转后会出现空白点,需要进行插值处理.在放大一幅图像时,为什么会出现马赛克现象,有什么解决办法?放大图像后会出现空白点,需要进行插值处理,插值不精确时就会有马赛克现象采用更精细的插值方法或者平滑滤波,都可以缓解马赛克现象.编写程序,将一幅图像,逆时针旋转45度后,再缩小
1.5倍importcv2img=cv
2.imreadlena.bmpeightwidth=img.shape[:2]=cv
2.getRotationMatrix2Dwidth/2height/
2451.0/
1.5rotate=cv
2.warpAffineimgMwidthheightcv
2.imshow〃original〃,imgcv
2.imshowrotation”rotatecv
2.waitKeycv
2.destroyAlIWindows.编写程序,通过指定四个顶点坐标,将一幅图像进行透视变换importcv2importnumpyasnimg=cv
2.imread,lena.bmprowscols=img.shape[:2]ptsl=np.float32[
[15050]
[40050]
[60450]
[310450]]pts2=np.float32[
[5050][rows-5050][50cols-50][rows-50cols-50]]M=cv
2.getPerspectiveTransformptslpts2Dst=cv
2.warpPerspectiveimgMcolsrowscv
2.imshow〃img〃,imgcv
2.imshowz,dstz,dstcv
2.waitKeycv
2.destroyAlIWindows.简述均值滤波、中值滤波原理,分析比较它们的性能特点,并通过实例说明均值滤波是指用当前像素点邻域内的NxN个像素值的均值来代替当前像素值中值滤波法它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值均值滤波是线性平滑技术,中值滤波是非线性平滑技术均值滤波可以消除噪音,会使图像整体变模糊中值滤波能消除孤立的噪声点实例说明略.高斯滤波函数有哪些重要特性?
(1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的
(2)高斯函数是单值函数
(3)高斯函数的傅立叶变换频谱是单瓣的
(4)高斯滤波器宽度(决定着平滑程度)是由参数表征的,而且和平滑程度的关系是非常简单的由于高斯函数的可分离性,较大尺寸的高斯滤波器可以得以有效地实现.对于椒盐噪声图像,哪种滤波效果最好?通过程序实现结果说明中值滤波效果最好程序实现:importcv2img=cv
2.imread,zlenanoise.jpg”0st=cv
2.medianBlurimg5cv
2.imshoworiginal”imgcv
2.imshowresult”dstcv
2.waitKeycv
2.destroyAHWindows.编写程序,自定义一个2D卷积滤波,并对图像进行处理importnumpyasnimportcvimg=cv
2.imrcadz,lenanoisejpg”0ernel=np.ones33np.float32/st=cv
2.filter2Dimg-1kernelcv
2.imshoworiginal”imgcv
2.imshow〃dst”dstcv
2.waitKeycv
2.destroyAlIWindows.为什么中值滤波核的大小必须为奇数?因为只有奇数才有中值偶数的话就没有中间值第7章.简述Sobel算子、Scharr算子、拉普拉斯算子的原理,分析比较它们的性能特点,并通过实例说明Sobel算子是把图像中每个像素的9个相邻像素点(包含该像素本身)的灰度值加权求和,在边缘处达到极值从而检测边缘;Scharr算子,该算子具有和Sobel算子同样的速度,且精度更高可以将Scharr算子看作对Sobel算子的改进;Laplacian(拉普拉斯)算子是一种二阶导数算子,其具有旋转不变性,可以满足不同为的图像边缘锐化(边缘检测)的要求通常情况下,其算子的系数之和需要为零实例说明略.拉普拉斯算子为什么能锐化图像边缘?从卷积的形式来看,如果在图像中的一个比较暗的区域出现了一个亮点,那么经过拉普拉斯算子处理后,这个亮点会变得更亮因为在一个很暗的区域内,很亮的点和其周围的点属于差异比较大的点,在图像上,差异大就是这个亮点与周围点的像素在数值上的差值大那么基于二阶微分的拉普拉斯算子就是求取这种像素值发生突然变换的点或线,此算子却可用二次微分正峰和负峰之间的过零点来确定,对孤立点或端点更为敏感,因此特别适用于检出图像中的孤立点、孤立线或线端点为目的的场合.对于旋转后的图像,哪种梯度算子效果最好?通过程序实现结果说明Scharr算子检出的边缘细节更多程序实现略.编写程序,自定义一个图像梯度算子,并对图像进行处理importcv2img=cv
2.imreadClena.bmpcv
2.IMREADGRAYSCALESobelx=cv
2.Sobelimgcv
2.CV64F
0.90Sobely=cv
2.Sobelimgcv
2.CV64F
00.9Sobelx=cv
2.convertScaleAbsSobelxSobely=cv
2.convertScaleAbsSobelySobelxy=cv
2.addWeightedSobelx
0.4Sobely
0.60cv
2.imshoworiginal”imgcv
2.imshow〃xy〃,Sobelxycv
2.waitKeycv
2.destroyAHWindows。