计算机视觉应用开发基础 练习题及答案_第1页
计算机视觉应用开发基础 练习题及答案_第2页
计算机视觉应用开发基础 练习题及答案_第3页
计算机视觉应用开发基础 练习题及答案_第4页
计算机视觉应用开发基础 练习题及答案_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章

1.在自己的计算机中安装配置Anaconda和OpenCV的开发环境。

2.完成读取指定图片,显示并保存的程序。

ena=cv2.imreadClena.bmp”

cv2.destroyA11Windows()

r=cv2.imwrite("result,bmp”,lena)

3.在自己的计算机中安装配置OpenCV贡献库

第2章

1.简述二值图像、灰度图像和彩色的区别。

二值图像也称单色图像或者1位图像,以及颜色深度为1的图像,它也是仅仅包含黑色和白

色两种颜色的图像。二值图像的表示方法简单便捷,但是因为其仅有黑、白两种颜色,所

表示的图像不够细腻。如果想要表现更多的细节,就需要使用更多的颜色。灰度图像是包

含灰度级(亮度)的图像,通常,计算机会将灰度处理为256个灰度级,用数值区间「0.2551

来表示。相比二值图像和灰度图像,彩色图像是更常见的•类图像,它能表现出更丰富的

细节信息。以常用的RGB色彩空间为例,在RGB色彩空间中,有R(red,红色)通道、G(green,

绿色)通道和B(blue,蓝色)通道,共三个通道。

2.I6bit深度的彩色图像可以表示多少种颜色?如果布.•幅256X256像素的I6bit的深

度的彩色图像,其数据大小是多少字节?

16bil深度的彩色图像可以表示216*2-16*2」6=2-48=281474976710656种颜色;一幅256

X256像素的16bit的深度的彩色图像的数据大小是256*256*16*3/8=393216字节

3.编写一个程序,要求读取一幅灰度图像,并对其像素值进行访问、修改。

import显

img=cv2.imreadClena.bmp”,0)

cv2.imshow("original”,img)

foriinrange(40.200):

forjinrange(160,200):

img[i.il=0

cv2.imshow("modified”,img)

cv2.waitKey()

cv2.destroyAlIWindows()

4.编写一个程序,生成•幅彩色图像,让其中的像素值均为随机数。

importnumpyas

img=np.random,randint(0,256,size=[256,256,3],dtype=np.uint8)

cv2.imshow(*image*,img)

cv2.waitKeyO

cv2.destroyAlIWindows()

第3章

1.图像的位运算可以分为哪儿类?

图像的位运算有按位与、按位或、按位异或、按位取反.

2.编写程序,使用随机数数组模拟灰度图像,观察使用“+”对像素值求和的结果。

3.编写程序,使用函数cv2.addWeightedO将一幅图像的感兴趣区域(ROD混合在另外

一幅图像内。

importcv2

inportnunpyasnp

img=cv2.imread(*lena.bmp*,1)

=np.zeros((w,h),dtype=np.uint8)

[100:300,200:100]

=cv2.bitwiseand(img,img,mask=mask)

cv2.imread(*sky.bmp”,1)

result=cv2.addWeiBhted(img,0.6,img2,0.4,0)

imshow("result”,result)

waitKcyO

cv2.destroyAl1Windows()

4.编写程序,构造一个正方形掩模图像,将该掩模图像作为按位与函数的掩模参数,实

现保留图像的指定部分。

importnumpyasnp

cv2.imread(*lena.bmp*,1)

mask=np.zeros((w,h),dtype=np.uint8)

[100:300,200:400]=255

dst-cv2.bitwiseand(irag,img,mask=mask)

cv2.imshow(*img*.img)

cv2.imshcw("mask”,mask)

cv2.imshow("dst",dst)

cv2.waitKeyO

cv2.destroyAHWindows()

第4章

1-什么是三原色原理?

白光通过棱镜后被分解成多种颜色逐渐过渡的色谱,颜色依次为红、楂、黄、绿、百、歌、

紫,这就是可见光谱。其中人眼对红、绿、薇最为敏感,人的眼暗就像一个三色接收器的体

系,大多数的颜色可以通过红、绿、蓝三色按照不同的比例合成产生。同样绝大多数单色光

也可以分解成红绿蓝三种色光。这是色度学的城基本原理,即三基色原理.

2.在RGB彩色系统中,每个RGB分量图像是一幅8位图像,共有多少不同的彩色级?

2.8*2.8*2-8=16777216种彩色

3.编写程序,将图像在BGR和RGB色彩空间之间相互转换。

iuport觑

lena=cv2.imread(*1ena.bmp*)

rgblmage=cv2.cvtColor(lena,cv2.COLORIiGR2RGB)

cv2.imshow(*bgrw,lena)

cv2.imshow("rgb”,rgblmage)

cv2.wailKey0

4.编写程序,调整HSV色彩空间内丫通道的值,观察其处理结果。

impoitcv2

=cv2.ireread(*lena.bmp")

=cv2.cvtColor(img,cv2.COLORBGR2HSV:

v=cv2.split(hsv)

hsv2=cv2.merge([hfs,v])

im«2=cv2.cvtColor(hsv2,cv2.COLORHSV2BGR)

cv2.imshowCimg",img)

cv2.imshow(*img2*,img2)

cv2.wailKeyO

destroyAllWindows()

第5章

I.图像有哪几种常见的几何变换?

常见的几何变换有缩放、翻转、仿射变换、透视、重映射等。

2.图像旋转会引起图像失真吗,为什么?

图像旋转会引起图像失真,因为图像旋转后会出现空白点,需要进行插值处理。

3.在放大•幅图像时,为什么会出现马赛兑现象,有什么解决办法?

放大图像后会出现空白点,需要进行插值处理,插值不精确时就会有马赛克现象。采用更

精细的插值方法或者平滑滤波,都可以缓解马赛克现象。

4.编写程序,将一幅图像,逆时针旋转45度后,再缩小L5倍。

cv2.imread(*1ona.bmp")

ight,width=img.shape[:2]

cv2.getRotationMatrix2D((width/2,height/2),45,1.0/1.5)

rotate=cv2.warpAffine(img,M,(width,height))

imshow("original”,img)

cv2.imshow("rotation”,rotate)

cv2.waitKey()

destroyAlIWindowsO

5.编写程序,通过指定四个顶点坐标,将一幅图像进行透视变换°

importcv2

importnumpyasnp

cv2.imread('lena.bmp')

colsimg

ptsl=np.float32([[150,50],[400,50],[60,450],[310,450]])

pts2=np.float32([[50,50],[rows-50,53],[50,cols-50],[rows50,cols-50]])

M=cv2.getPerspectiveTransform(ptsl,pts2)

Dst=cv2.warpPerspective(img,M,(cols,rows))

cv2.imshow(*iing*,img)

imshow(*dst*,dst)

waitKeyO

第6章

1.简述均值海波、中值滤波原理,分析比较它们的性能特点,并通过实例说明。

均值灌波是指用当前像素点邻域内的NxN个像素值的均值来代替当前像素值。中值渔波法

它将每一像素点的灰度值设fit为该点某邻域窗口内的所有像素点灰度值的中值。均值涌波

是线性平滑技术,中值港波是非线性平滑技术。均值港波可以消除噪音,会使图像整体变

模糊。中值漉波能消除孤立的噪声点。实例说明略。

2.高斯通波函数有哪些重要特性?

<1)二维高斯函数具TT旋转对称性,即滤波器在各个方向上的平滑程度是相同的。

(2)高斯函数是单值函数

(3)高斯函数的傅立叶变换频谱是单^的。

(4)高斯滤波器宽度(决定着平滑程度)是由参数。表征的,而且。和平滑程度的关系是

非常简单的。

(5)由于高斯函数的可分离性,较大尺寸的高斯海波器可以得以有效地实现。

3.对于椒盐噪声图像,哪种滤波效果最好?通过程序实现结果说明。

中值滤波效果最好。程序实现:

img=cv2.imreadflenanoise.jpg”,0)

cv2.medianBlur(img,5)

cv2.imshowC*original*,img)

cv2.imshow("result”,dst)

waitKeyO

cv2.destroyA11Windows0

4.编写程序,自定义一个2D卷积海波,并对图像进行处理.

importnumpyasnp

img=cv2.imread(*lenanoise.jpg*.0)

kernel=np.ones((3,3),np.float32)/9

=cv2.filter2D(img,kernel)

imshow("original”,img)

cv2.imshow(*dst*,dst)

2waitKey()

destroyAl1Windows()

5.为什么中值源波核的大小必须为奇数?

因为只有奇数才有中值。偶数的话就没有中间值。

第7章

1.简述Sobel算子、Schan•算子、拉普拉斯算子的原理,分析比较它们的性能特点,并

通过实例说明。

Sobel算子是把图像中每个像素的9个相钠像素点(包含该像素本身)的灰度值加权求

和,在边缘处达到极值从而检测边缘:Scharr算子,该算子具有和Sobel算子同样的

速度,且精度更高。可以将Scharr算子看作对Sobel算子的改进:Laplacian(拉普拉

斯)算子是一种二阶导数算子,其具有旋转不变性,可以满足不同为的图像边缘锐化

(边缘检测)的要求。通常情况下,其算子的系数之和需要为零。实例说明略。

2.拉抨拉斯算子为什么能锐化图像边缘?

从卷积的形式来看,如果在图像中的一个比较暗的区域出现了一个亮点,那么经过拉普拉

斯算子处理后,这个亮点会变得更亮。因为在一个很暗的区域内,很亮的点和其周围的点

属于差异比较大的点,在图像匕差异大就是这个亮点与周围点的像素在数值上的差值大。

那么基于二阶微分的拉普拉斯算子就是求取这种像素值发生突然变换的点或线,此算子却

可用二次微分止峰和负峰之间的过零点来确定,对孤立点或端点更为敏感,因此特别适用

于检出图像中的孤立点、孤立线或线端点为目的的场合。

3.对于旋转后的图像,哪种梯度算子效果最好?通过程序实现结果说明。

Schaw算子检出的边缘细节更多。程序实现略。

4.编写程序,自定义一个图像梯度算子,并对图像进行处理。

importcv2

img=cv2.imreadClena.bmp',cv2.IMREAEGRAYSCALE)

Sobelx=cv2.Sobel(img,cv2.CV64F,0.9,0)

Sobely=cv2.Sobel(img,cv2.CV64F,0,0.9)

Sobelx=cv2.convertScaleAbs(Sobelx)

Sobely=cv2.convertScaleAbs(Sobely)

Sobelxy=cv2.addWeighted(Sobelx,0.4,Sobely,0.6,0)

cv2.imshow("original”,img)

cv2.imshow(*xy*,Sobelxy)

cv2.waitKeyO

cv2.destroyA11Windows0

第8章

1.编写程序,读入一幅图像,计算并显示其直方图。

importmatplot1ib.pyplotaspit

=cv2.imread(*lena.

cv2.imshow("original",

pit.hist(inig.ravel0,256)

cv2.waitKeyO

cv2.destrovA11Windows0

2.为什么在一般情况下对离散图像的直方图均衡化并不能产生完全平坦的直方图?

理由是:(1)直方图是近似概率密度函数,(2)简并现象的存在使处理的灰度级总是要减少

的,这是像素灰度有限的必然结果。均衡化只是近似的,其结果只能是产生近似均匀的直方图。

3.编写程序,读入一幅图像,对其进行直方图均衡化,并画出处理前后的直方图。

importmatplotlib.pyplotaspit

img=cv2.imreadClena.bmp,,0)

equ=cv2.equalizeHist(img)

imshow("original”,img)

cv2.imshow("resuIt”,equ)

It.figure("原始图像直方ST)

pit.hist(img.ravel(),256)

plI.figure("均衡化结果直方图")

pit.hist(equ.rave1(),256)

cv2.waitKeyO

destroy.MlWindows()

第9章

1.编写程序,利用绘制线段函数,在一幅图像上绘制一个三角形。

=cv2.imread("lena.bmp")

img=cv2.line(img,(0,0),(n,n),(255,00),3)

img=cv2.line(img,(0,n),(n,n),(255,0,0),3)

cv2.line(img,(0,0),(0,n),(255,0.0),3)

iiDshow(*img*»img)

waitKeyO

destroyAlIWindows

2.编写程序,利用多边形绘制函数,在一幅可像上绘制一个三角形。

importnumpyasnp

importcv2

img=cv2.imread(*lena.bmp*)

pts=np.array([[0,0],[400,400],[0,400]].np.int32)

#牛.成各个顶点,注意数据类型为int32

pts=pts.reshape((-1,1,2))

#第1个参数为-1,表明它未设置具体值,它所表示的维度值是通过其他参数值计算得到的

cv2.polylines(img,[pts],True,(0»255,0)8)

#调用函数cv2.polylines。完成多边形绘图。注意,第3个参数控制多边形是否封闭

cv2.destroyAl1Windows()

3.编写程序,在一幅图像上绘制圆圈,并在31中绘制文字。

importcv2

d=400

cv2.imrcadC*lena.bmp")

(centerX,centerY)=(round(img.shape[1]/2).round(img.shape[0]/2))

red=(0,0,255)

cv2.circle(img,(centerX,centerY),200,red,3)

font=cv2,FONT_HERSHEY_SIMPLEX

cv2.putText(img,'Lena,(100,200),font,3,(0,255,0),15)

cv2.putText(img,'Lena",(100,200),font,3,(0,0,255),5)

cv2.imshow(*img*,img)

cv2.waitKeyO

cv2.destroyAlIWindows()

第10章

1.一幅原始尺寸为512*512的图像,最多可以生成多少层的图像金字塔?

512->256->128->64->32->16->8->4->2-)1

共9层图像金字塔。

2.编写程序,使用函数cv2.pyrDown()对一隔图像进行向下采样至原始大小的16分之1,

并显示。

cv2.imrcad("lcna.bmp”,cv2.IMREADGRAYSCALE)

cv2.dcstroyAlIWindows()

3.编写程序,使用函数c\2pyrUp()对一幅图像进行向上采样至原始大小的8倍,并显示。

img-cv2.imread(*1ena-sma11.bmp*,cv2.IMREADGRAYSCALE)

rl=cv2.pyrUp(img)

cv2.imshow("rl",rl)

cv2.waitKcyO

cv2.destroyAlIWindows()

第11章

1.编写程序,使用Hairis角点检测方法对自然图像进行角点检测。

importcv2

importnumpyasnp

cv2.imrcad(fi1ename)

cv2.cvtColor(img,cv2.C0L0R_BGR2GRAY)

dst=cv2.cornerHarris(gray,2,3,0.04)

cv2.dilatc(dst,None)

imgEdst>0.01*dst.maxO]=[0,0,2E5]

cv2.namedWindowCimage',cv2.WINDOWNOFMAL)

cv2.imshow(,image*,img)

cv2.destroyAHWindowsO

2.编写程序,对同一幅图像,比较SIFT和SIRF抽取特征的时间。

gray=cv2.cvtColor(img,cv2.C0L0R_BGR2GRAY)

start_time=time.t

ift=cv2.xfeatures2d.SIFTcrea

关键点找出sift特征向量

time=time.time

print(end_time-start_time)

ret=cv2.drawKcypoints(gray,kp,img)

imshowC*ret*,ret)

dcstroyAlIWindowsO

starttime=tin»e.ti

surf=cv2.xfeatures2d.SURF_create(400)#SURFHessian的阈值

kp,des-surf,detectAndCompute(img,Nene)

time=lime.time

print(end_time-start_time)

cv2.drawKeypoints(img,kp.

img,门ags=cv2.DRAWMATCHES_FLAGS_DRAW』ICH_KEYPOINTS)也会制关键点

cv2.imshowfimg”,img)

waitKcy()

cv2.destroyAlIWindows()

3.编写程序,对两岫图像进行SIFT特征检冽并做k近邻匹配

importcv2

imgl=c\2imreadChousel.bmp”,cv2.IMREAD_GRAYSCALE)

img2;cv2.imread(*house2.bmp*,cv2.IMREADGRAYSCALE)

siftl=cv2.xfeatures2d.SIFTcreate

kpl,desl-siftl.compute(imgl,kpl)

sift2=cv2.xfcatures2d.SIFTcrcateC

kp2,des2-sifl2.compute(img2,kp2)

=cv2.BFMatcher(cv2.NORMAL1,crossCheck=False)

matches-bf.knnMatch(sample,sample2,k=l)

img3=cv2.drawMatchesKnn(inigl,kpl,img2,kp2,matches,img2,fl

imshow(*result*,img3)

cv2.imwrite(*ma

cv2.waitKeyO

cv2.dcstroyAlIWindowsO

第12章

1.简述积分图像快速计算Haa%征的原理租计算方法,并编写程序实现。

对于一个灰度图像1而言,其积分图ii也是一张与1尺寸相同的图,只不过该图上任意一点

(X,y)的值是指从灰度图像I的左上角与当前点所圉成的矩形区域内所有像素点灰度值之

和,积分图构造好之后,图像中任何矩阵区域的像素累加和都可以通过简单运算得到。

importcv2

importnumpyasnp

imgl-cv2.inu*ead(,lena.bmp*)

intejil=cv2.integral(imgl)#

integl-integl/np.max(integl)*255#转为0~255的uint8类型,方便画图

integl=np.array(integl,dtype=*ui

naraedWindowC,imgl',0)

imshowCimgT,imgl'

cv2.namcdWindow(*integl',0)

cv2.imshowC,integl,,integl)

cv2.destroyAlIWindowsO

2.编写程序,使用EigenFishfaccs实现人脸识别。

importnurapyasnp

images.append(cv2.imread(*faces-training/g1.bmp*,cv2.IMREADGRAYSCALE))

images.append(cv2.imread(*faces-training/g2.bmp*,cv2.1MREADGRAYSCALE))

images.append(cv2.imread("faces-lraining/sl.bmp”,cv2.IMREAD_GRAYSCALE))

images,append(cv2.imread(*faces-traininj/s2.bmp”,cv2.IMREAD_GRAYSCALE))

labels=[0,0,1,1]

recognizer=cv2.face.EigenFaceRecognizsr_create()

recognizer,train(images,np.array(labels))

ctimaEC=cv2.imread(*faccs-1raining/g3.bmp*,cv2.IMREADGRA'

label,confidence=recognizer,predict(predict_image)

print(*label=*,label)

int("confidence—,confidence)

第13章

1.简述HOG特征的原理和计算方法,并比较与其他特征的优缺点。

HOG的基本思想就是对检测窗口(在图像中滑动)进行分割以形成块(Block)和单元格(Cell),

然后计算:每个像素的梯度(包括方向和幅值),再以块为班位统计每个雎元格的加权直方

图,最后将各个年元格和块内的直方图进行纵联形成HOG描述符。

优点:

(DH0G表示的是边缘(梯度)的结构特征,因此可以描述局部的形状信息;

(2)位置和方向空间的量化一定程度上可以抑制平移和旋转带来的影响:

(3)采取在局部区域归一化直方图,可以部分抵消光照变化带来的影响:

(4)由于一定程度忽略了光照颜色对图像造成的影响,使得图像所需要的表征数据

的鼐度降低了:

(5)而且由于这种分块分单元的处理方法,也使得图像局部像索•点之间的关系可以

很好得到表征。

缺点:

(1)描述符生成过程冗长,导致速度慢,实时性差:批注口1]:描述符?

(2)很难处理遮挡问题:

(3)由于梯度的性质,该描述符对噪点相当敏感。

2.编写程序,比较使用和不使用非极大值并制做行人检测的效果。

importcv2

hog=cv2.HOGDescriptorO

hog.sctSVMDetcctor(cv2.HOGDcscriptorgetDcfaultPeopleDetcctor())

#检测图片中的行人

(rects,weight)=hog.detectMultiScale(src,

winStride=(2,4),padding=(8,8),seale=l.2,usaMeanshiftGrouping=Fa1se)

(x,y,w,h)inrects:

cv2.rectangle(sre,(x,y),(x+w,y+h),(0,255,0),

cv2.imshow(*hog-detectorl*»sre)

(rects.weight)hog.detectMultiScale(src,

winStride=(2,4),padding=(8,8),scale=l.2,ussMeanshiftGrouping=True)

for(x,y,w,h)inrects

cv2.rectangle(sre,(x,y),(x+w,y+h),(0,255,0),

waitKey(O)

cv2.destroyAl1Windows()

第14章

1.简述网络爬虫的工作流程。

网络爬虫的主要思想是模拟人的浏览操作,在这种模拟的基础上,解析网页并提取数

据。网络爬虫的具体工作流程如下:

首先选取一部分精心多腕的种子URL(网络地址)开始抓取。Pyhon语言提供了很多类似

的函数库或框架,如uilib、reguest、scrapy等,通过模拟真实用户浏览网页行为,

获取URL所对应网页。

然后,将这些URL放入待抓取URL队列.通过对上一步获取的网页代码进行解析,可以

通过re(正则表达式)BeaoifulSoup4.HIMLParser等函数库来处理,提取出一系列的

URL和目标数据。这些URL会被网络爬虫加入到待抓取的URL列表中,而感兴趣的数据

则被保存到指定位置。

接下来,从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将

URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL

队列。

最后,从上•步获取到的网页中提取URL和目标数据,URL加入到待抓取列表中等待下

•次网络爬虫访问,目标数据则保存到指定位置,从而进入下•个循环。

2.编写程序,自己寻找一些带图片的网页,爬取网页上的图片并下载。

importrequests

url=*https://ticba.baidu.co<n/p/604547,1546,

(*l,ser-Agent*:*Mozilla/5.0(WindowsKT

0.0:Win64:x64;rv:70.0)Gecko/20100101FirefW70.0*)

reques

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论