《计算机视觉技术与应用》-----第四章 图像变换

系列文章目录

《计算机视觉技术与应用》-----第二章 图像处理基础

《计算机视觉技术与应用》-----第三章 图形用户界面

《计算机视觉技术与应用》-----第四章 图像变换

《计算机视觉技术与应用》-----第五章 边缘和轮廓

《计算机视觉技术与应用》-----第六章 边缘和轮廓

《计算机视觉技术与应用》-----第七章 边缘和轮廓

《计算机视觉技术与应用》----- 重点复盘


前言

提示:这里可以添加本文要记录的大概内容:

图像变换是指通过技术手段将图像转换为另一幅图像,如色彩空间变换、几何变换、图像模糊、阈值处理和形态变换等。


提示:以下是本篇文章正文内容,下面案例可供参考

一、4.1 色彩空间变换

  1. #test4-1.py 将BGR色彩空间转换为RGB色彩空间
    示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
#test4-1.py 将BGR色彩空间转换为RGB色彩空间
import cv2
img=cv2.imread('bee.jpg')  	            #读取图像
cv2.imshow('BGR',img)  	                #显示图像
img2=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #转换色彩空间为RGB
cv2.imshow('RGB',img2)  	             #显示图像
cv2.waitKey(0)
  1. #test4-2.py:BGR色彩空间转换为GRAY色彩空间
    在这里插入图片描述
#test4-2.py:BGR色彩空间转换为GRAY色彩空间
import cv2
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('BGR',img)  	        #显示图像
img2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转换色彩空间为GRAY
cv2.imshow('GRAY',img2)  	        #显示图像
cv2.waitKey(0)
  1. #test4-3.py:BGR色彩空间转换为YCrCb色彩空间

3.1 YCrCb概念
YCrCb即YUV,主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。

3.2应用
在人脸检测中也常常用到YCrCb空间,因为一般的图像都是基于RGB空间的,在RGB空间里人脸的肤色受亮度影响相当大,所以肤色点很难从非肤色点中分离出来,也就是说在此空间经过处理后,肤色点是离散的点,中间嵌有很多非肤色,这为肤色区域标定(人脸标定、眼睛等)带来了难题。如果把RGB转为YCrCb空间的话,可以忽略Y(亮度)的影响,因为该空间受亮度影响很小,肤色会产生很好的类聚。这样就把三维的空间降为二维的CrCb,肤色点会形成一定得形状,如:人脸的话会看到一个人脸的区域,手臂的话会看到一条手臂的形态,对处理模式识别很有好处,根据经验某点的CrCb值满足:133≤Cr≤173,77≤Cb≤127 那么该点被认为是肤色点,其他的就为非肤色点。【参考RGB和YCrCb

在这里插入图片描述

#test4-3.py:BGR色彩空间转换为YCrCb色彩空间
import cv2
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('BGR',img)  	        #显示图像
img2=cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb) #转换色彩空间为YCrCb
cv2.imshow('YCrCb',img2)  	        #显示图像
cv2.waitKey(0)
  1. #test4-4.py:BGR色彩空间转换为HSV色彩空间
    HSV色彩空间
    色相(H)是色彩的基本属性,就是平常所说的颜色名称,如红色、黄色等
    用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
    在这里插入图片描述
    饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。
    明度(V),亮度(L),取0-100%。
    在这里插入图片描述
    【参考:HSV色彩空间
    在这里插入图片描述
#test4-4.py:BGR色彩空间转换为HSV色彩空间
import cv2
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('BGR',img)  	        #显示图像
img2=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #转换色彩空间为HSV
cv2.imshow('HSV',img2)  	        #显示图像
cv2.waitKey(0)

二、4.2 几何变换

几何变换是指对图像执行放大、缩小、旋转等各种操作。

  1. 缩放图像
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

#test4-5.py:缩放图像
import cv2
img=cv2.imread('bee.jpg')  	#读取图像
sc=[1,0.2,0.5,1.5,2]            #设置缩放比例
cv2.imshow('showimg',img)  	#显示图像
while True:                   	    
    key=cv2.waitKey() #delay = 0:持续无限长的时间,delay >0:持续多少毫秒delay <0:等待键盘按键,任何一个按键都会关闭程序 
    if 48<=key<=52: #按键【0】、【1】、【2】、【3】或【4】
        x=y=sc[key-48]  #获得缩放比例
        img2=cv2.resize(img,None,fx=x,fy=y)   #缩放图像 dsize=None 目标图像高度=原始图像*fx
        cv2.imshow('showimg',img2)  	        #显示图像

  1. 翻转
    在这里插入图片描述
#test4-6.py:翻转图像
import cv2
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('showimg',img)  	#显示图像

img2=cv2.flip(img,0)
cv2.imshow('绕X轴垂直翻转',img2)  #绕X轴垂直翻转
img3=cv2.flip(img,1)
cv2.imshow('绕y轴水平翻转',img3)  #绕y轴水平翻转
img4=cv2.flip(img,-1)
cv2.imshow('水平、垂直翻转',img4)  #水平、垂直翻转
key=cv2.waitKey(0)


  1. 仿射
    3.1 平移
    平移是指将图像沿水平或垂直方向移动一定像素。
    在这里插入图片描述
#test4-7.py:图像向左移动100像素,向下移动50像素
import cv2
import numpy as np
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('img',img)  	        #显示图像
height=img.shape[0]             #获得图像高度
width=img.shape[1]              #获得图像宽度
dsize=(width,height)
m=np.float32([[1,0,100],[0,1,50]])#创建转换矩阵
img2=cv2.warpAffine(img,m,dsize)        #平移图像
cv2.imshow('imgx+100y+50',img2)  	#显示图像
cv2.waitKey(0)

3.2 缩放
缩放矩阵M=[[h,0,0],[0,v,0]
在这里插入图片描述

#test4-8.py:图像缩放
import cv2
import numpy as np
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('img',img)  	        #显示图像
height=img.shape[0]             #获得图像高度
width=img.shape[1]              #获得图像宽度
dsize=(width,height)
m=np.float32([[0.5,0,0],[0,0.5,0]])#创建转换矩阵 缩放矩阵M=[[h,0,0],[0,v,0]
img2=cv2.warpAffine(img,m,dsize)        #执行缩放
cv2.imshow('img0.5x+0.5y',img2)  	#显示图像
cv2.waitKey(0)

3.3 旋转
在这里插入图片描述

#test4-9.py:图像旋转
import cv2
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('img',img)  	        #显示图像
height=img.shape[0]             #获得图像高度
width=img.shape[1]              #获得图像宽度
dsize=(width,height)
m=cv2.getRotationMatrix2D((width/2,height/2), -60, 0.5)#创建转换矩阵 (ceter,angle,scale) angele负数表示顺时针旋转
img2=cv2.warpAffine(img,m,dsize)        #执行旋转
cv2.imshow('imgRotation',img2)  	#显示图像
cv2.waitKey(0)

3.4 三点映射变换
将图像转换为任意的平行四边形
在这里插入图片描述

#test4-10.py:图像的三点映射变换
import cv2
import numpy as np
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('img',img)  	        #显示图像
height=img.shape[0]             #获得图像高度
width=img.shape[1]              #获得图像宽度
dsize=(width,height)
src=np.float32([[0,0],[width-10,0],[0,height-1]])#取原图像中三个点
dst=np.float32([[50,50],[width-100,80],[100,height-100]])#设置三点在目标图像中的坐标
m = cv2.getAffineTransform(src, dst)#创建转换矩阵
img2=cv2.warpAffine(img,m,dsize)        #执行转换
cv2.imshow('imgThreePoint',img2)  	#显示图像
cv2.waitKey(0)

3.4 透视
在这里插入图片描述

#test4-11.py:图像的透视变换
import cv2
import numpy as np
img=cv2.imread('bee.jpg')  	#读取图像
cv2.imshow('img',img)  	        #显示图像
height=img.shape[0]             #获得图像高度
width=img.shape[1]              #获得图像宽度
dsize=(width,height)
src=np.float32([[0,0],[width-10,0],
                [0,height-10],[width-1,height-1]])#取原图像中四个点
dst=np.float32([[50,50],[width-50,80],
                [50,height-100],[width-100,height-10]])#设置四点在目标图像中的坐标
m = cv2.getPerspectiveTransform(src, dst)#创建转换矩阵
img2=cv2.warpPerspective(img,m,dsize)#执行转换
cv2.imshow('imgFourPoint',img2)  	#显示图像
cv2.waitKey(0)

三、4.3 图像模糊

1. 均值滤波
卷积核为3x3
在这里插入图片描述
卷积核为5x5
在这里插入图片描述
卷积核为21x21
在这里插入图片描述

代码如下:

#test4-12.py:均值滤波
import cv2
img=cv2.imread('lena2.jpg')
cv2.imshow('img',img) 
img2=cv2.blur(img,(21,21))		#可调整卷积核大小查看不同效果
cv2.imshow('imgBlur',img2)
cv2.waitKey(0)

高斯滤波
在这里插入图片描述

#test4-13.py:高斯滤波
import cv2
img=cv2.imread('lena2.jpg')
cv2.imshow('img',img) 
img2=cv2.GaussianBlur(img,(3,3),0,0)#可调整卷积核大小查看不同效果
cv2.imshow('imgBlur',img2)
cv2.waitKey(0)

3.方框滤波
归一化

未归一化

在这里插入图片描述
未归一化时,滤波结果得到的像素值可能会超过允许的最大值,从而被截断为最大值,这时就会得到一副白色图像。(也就是说,未归一化时,滤波结果为像素值之和,可能会超过255,超过截断为255,那就是白色图像)

4.中值滤波
在这里插入图片描述

#test4-15.py:中值滤波
import cv2
img=cv2.imread('lena2.jpg')
cv2.imshow('img',img) 
img2=cv2.medianBlur(img,5)#可调整卷积核大小查看不同效果
cv2.imshow('imgBlur',img2)
cv2.waitKey(0)

5. 双边滤波
在这里插入图片描述

#test4-16.py:双边滤波
import numpy as np
import cv2
img=cv2.imread('lena2.jpg')
cv2.imshow('img',img) 
img2=cv2.bilateralFilter(img,50,50,50)#可调整参数查看不同效果
cv2.imshow('imgBlur',img2)
cv2.waitKey(0)

6. 2D卷积
在这里插入图片描述

#test4-17.py:2D卷积
import numpy as np
import cv2
img=cv2.imread('lena2.jpg')
k1=np.array([[3,3,3,3,3],
             [3,9,9,9,3],
             [3,11,12,13,3],
             [3,8,8,8,3],
             [3,3,3,3,3],])/25#自定义卷积核1
k2=np.ones((5,5),np.float32)/25#自定义卷积核2  1填充数组
img2=cv2.filter2D(img,-1,k1)
cv2.imshow('imgK1',img2)
img2=cv2.filter2D(img,-1,k2)
cv2.imshow('imgK2',img2)
cv2.waitKey(0)

7.阈值处理
在这里插入图片描述

#test4-18.py:二值化阈值处理
import cv2
img=cv2.imread('bee.jpg')
cv2.imshow('img',img)
ret,img2=cv2.threshold(img,150,255,cv2.THRESH_BINARY)#阈值处理
cv2.imshow('imgTHRESH_BINARY',img2)
cv2.waitKey(0)

9.反二值化阈值处理
在这里插入图片描述

#test4-19.py:反二值化阈值处理
import cv2
img=cv2.imread('bee.jpg')
cv2.imshow('img',img)
ret,img2=cv2.threshold(img,150,255,cv2.THRESH_BINARY_INV)#阈值处理
cv2.imshow('imgTHRESH_BINARY_INV',img2)
cv2.waitKey(0)

10. 截断阈值处理
在这里插入图片描述

#test4-20.py:截断阈值处理
import cv2
img=cv2.imread('bee.jpg')
cv2.imshow('img',img)
ret,img2=cv2.threshold(img,150,255,cv2.THRESH_TRUNC)#阈值处理
cv2.imshow('imgTHRESH_TRUNC',img2)
cv2.waitKey(0)

11. 超阈值零处理
在这里插入图片描述

#test4-21.py:超阈值零处理
import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('img',img)
ret,img2=cv2.threshold(img,100,255,cv2.THRESH_TOZERO_INV)#超阈值0处理
cv2.imshow('imgTHRESH_TOZERO_INV',img2)
cv2.waitKey(0)

12.低阈值零处理
在这里插入图片描述

#test4-22.py:低阈值零处理
import cv2
img=cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('img',img)
ret,img2=cv2.threshold(img,150,255,cv2.THRESH_TOZERO)#低阈值0处理
cv2.imshow('imgTHRESH_TOZERO',img2)
cv2.waitKey(0)

五、 4.5 形态变换

1.腐蚀
OpenCV-腐蚀cv::erode
在这里插入图片描述

迭代1次
在这里插入图片描述
迭代5次
在这里插入图片描述
通过腐蚀操作,图像的边界被侵蚀,白色区域缩小。

#test4-26.py:腐蚀
import cv2
import numpy as np
img=cv2.imread('zh2.jpg')                   #读取图像
cv2.imshow('img',img)                       #显示原图像
kernel = np.ones((5,5),np.uint8)            #定义5×5核心 
img2 = cv2.erode(img,kernel,iterations = 1) #腐蚀,迭代1次
                                            #InputArray类型的src,输入图像,如Mat类型。
                                            #OutputArray类型的dst,输出图像。
                                            #InputArray类型的kernel,腐蚀操作的内核也就是上面所说的蒙版。为NULL时,默认表示以参考点为中心3*3的核。一般配合函数getStructuringElement使用,该函数可以构造一个指定形状和尺寸的蒙版。
                                            #Point类型的anchor,锚点。默认值(-1,-1),表示位于单位中心,一般不用。
                                            #int类型的iterations,迭代使用的次数,默认值为1。
                                            #int类型的borderType,推断图像外部像素的边界模式,我OpenCV版本的默认值为BORDER_CONSTANT。如果图像边界需要扩展,则不同的模式下所扩展的像素,其生成原则不同。
                                            #const Scalar&类型的borderValue,当边界为常数时的边界值,默认值为morphologyDefaultBorderValue()。
img3 = cv2.erode(img,kernel,iterations = 5) #迭代5次
cv2.imshow('img2_1',img2)                     #迭代1次结果
cv2.imshow('img2_5',img3)                     #迭代5次结果
cv2.waitKey(0)

2.膨胀
在这里插入图片描述

#test4-27.py:膨胀
import cv2
import numpy as np
img=cv2.imread('zh.jpg')                  #读取图像
cv2.imshow('img',img)                       #显示原图像
kernel = np.one((5,5),np.uint8)            #定义5×5核心
img2 = cv2.dilate(img,kernel,iterations = 2) #膨胀,迭代2次
                                             #src:输入的待膨胀图像,图像的通道数可以是任意的,但是图像的数据类型必须是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F之一。
                                            # dst:膨胀后的输出图像,与输入图像src具有相同的尺寸和数据类型。
                                            # kernel:用于膨胀操作的结构元素,可以自己定义,也可以用getStructuringElement()函数生成。
                                            # anchor:中心点在结构元素中的位置,默认参数为结构元素的几何中心点
                                            # iterations:膨胀的次数,默认值为1。
                                            # borderType:像素外推法选择标志,取值范围在表3-5中给出。默认参数为BORDER_DEFAULT,表示不包含边界值倒序填充。
                                            # borderValue:使用边界不变外推法时的边界值。

cv2.imshow('img2',img2)                     #显示转换结果图像
cv2.waitKey(0)

3.开运算
对图像先执行腐蚀操作,再对腐蚀的结果执行膨胀操作
在这里插入图片描述

#test4-28.py:开运算 
#对图像先执行腐蚀操作,再对腐蚀的结果执行膨胀操作
import cv2
import numpy as np
img=cv2.imread('zh2.jpg')                  #读取图像
cv2.imshow('img',img)                       #显示原图像
kernel = np.ones((5,5),np.uint8)            #定义5×5核心

op=cv2.MORPH_OPEN                           #设置形态操作类型

img2 = cv2.morphologyEx(img,op,kernel,iterations=2) #形态操作,迭代2次

cv2.imshow('img2',img2)                     #显示转换结果图像
cv2.waitKey(0)

4.闭运算
#与开运算相反,先对图像执行膨胀操作,再对膨胀的结果执行腐蚀操作
在这里插入图片描述

#test4-29.py:闭运算
#与开运算相反,先对图像执行膨胀操作,再对膨胀的结果执行腐蚀操作
import cv2
import numpy as np
img=cv2.imread('zh.jpg')                  #读取图像
cv2.imshow('img',img)                       #显示原图像
kernel = np.ones((5,5),np.uint8)            #定义5×5核心
op=cv2.MORPH_CLOSE                          #设置形态操作类型
img2 = cv2.morphologyEx(img,op,kernel,iterations=5) #形态操作,迭代5次
cv2.imshow('img2',img2)                     #显示转换结果图像
cv2.waitKey(0)

第4章实验1图像几何变换

请添加图片描述

#实验1 图像几何变换   旋转和缩放
import cv2
img = cv2.imread('clocktower.png')
cv2.imshow('showing',img)

h=img.shape[0]   #读取到原图的高度
w=img.shape[1]   #读取到原图的宽度   img.shape[2] ?  通道
angle = 1        #设置旋转的角度
scale = 1        #设置缩放比例
f = -1           #设置一个变量f=-1,f的作用就是控制缩放比例

while True:
    m = cv2.getRotationMatrix2D((w/2,h/2),-angle,scale+f*0.1)  #创建转换矩阵,以原图中心进行旋转
                                                               #顺时针选择  -angle   
                                                               #缩放比例设置 第一次:1+(-1)*0.1=1-0.1=0.9
                                                               #第二次:
    angle = (angle+10)%360                                    #设置选择角度
    scale = scale+f*0.1                                       #计算下一个缩放比例 <0.1 0.05+0.1=0.15
    if scale<=0.1 or scale >=1:                               #让缩放比例在10%~100%之间,通过变量f实现
        f=f*(-1)                                              # f是为了控制缩放
    img2 = cv2.warpAffine(img,m,(w,h))                        #执行旋转操作
    key = cv2.waitKey(100)                                    #设置0.1s
    if key == 27:
        break
    cv2.imshow('showing',img2)
cv2.destroyWindow()                                            #关闭窗口


实验2:图像形态变换

在这里插入图片描述

#实验2  开运算 先腐蚀再膨胀
import cv2
import numpy as np 
img = cv2.imread('AB.png')
cv2.imshow('img',img)

kernel = np.ones((5,5),np.uint8)  #利用numpy数组里面的ones()函数创建5x5的内核,内核全是1

op = cv2.MORPH_OPEN                       #表示开运算
img2 = cv2.morphologyEx(img,op,kernel,iterations=2)#迭代两次
img3 = cv2.morphologyEx(img,op,kernel,iterations=3)#迭代3次
cv2.imshow('img2_2',img2)
cv2.imshow('img2_3',img3)
cv2.waitKey(0)

习题

1.习题4-1:选择一幅图像,将其分别转换为RGB色彩空间、GRAY色彩空间、YCrCb色彩空间和HSV色彩空间
在这里插入图片描述

#习题4-1.py:选择一幅图像,将其分别转换为RGB色彩空间、GRAY色彩空间、YCrCb色彩空间和HSV色彩空间
import cv2
img=cv2.imread('clocktower.png')  		    #读取图像
#print(img.depth())
cv2.imshow('original',img)  	        	#显示图像

img2=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) 	#转换色彩空间为RGB
cv2.imshow('RGB',img2)  	        	    #显示图像

img2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 	#转换色彩空间为GRAY
cv2.imshow('GRAY',img2)  	        	    #显示图像

img2=cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb) 	#转换色彩空间为YCrCb
cv2.imshow('YCrCb',img2)  	        	    #显示图像

img2=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) 	#转换色彩空间为HSV
cv2.imshow('HSV',img2)  	        	    #显示图像
cv2.waitKey(0)

2.习题4-2:选择一幅图像,对其分别执行缩放、旋转、平移、透视等操作
在这里插入图片描述

#习题4-2.py:选择一幅图像,对其分别执行缩放、旋转、平移、透视等操作
import cv2
import numpy as np
img=cv2.imread('clocktower.png')  		#读取图像
cv2.imshow('original',img)  			#显示图像
h=img.shape[0]                          	#获得图像高度
w=img.shape[1]                          	#获得图像宽度

########################################################
#*************************1.缩放************************
########################################################
img2=cv2.resize(img,None,fx=0.3,fy=0.3)   	#缩小为20%
cv2.imshow('resize',img2)  	        	#显示图像
########################################################
#*************************2.旋转************************
########################################################
m=cv2.getRotationMatrix2D((w/2,h/2),90,0.5)	#创建转换矩阵,center=(w/2,h/2)表示旋转中心
                                            #angle=90 逆时针旋转90度,scale=0.5,缩小为50%
img2=cv2.warpAffine(img,m,(w,h))        	#执行旋转 m是旋转矩阵,(w,h)表示旋转后图像的大小
cv2.imshow('Rotation',img2)
########################################################
#*************************3.平移************************
########################################################
m=np.float32([[1,0,100],[0,1,100]])		#创建平移转换矩阵,M=[[1,0,m],[0,1,n]]
                                        #x+100,y+100 向右、向下分别平移100像素
img2=cv2.warpAffine(img,m,(w,h))        	#平移图像
cv2.imshow('offset',img2)  		        #显示图像
########################################################
#*************************4.透视************************
########################################################
src=np.float32([[0,0],[w,0],
                [0,h],[w,h]])	        #取原图像中四个点
                                        #四个点分别对应四边形的四个顶点
dst=np.float32([[50,50],[w-100,50],[50,h-50],
                [w-10,h-10]])	                #设置四点在目标图像中的坐标

m = cv2.getPerspectiveTransform(src, dst)	#创建透视转换矩阵 转换矩阵函数getPerspectiveTransform
img2=cv2.warpPerspective(img,m,(w,h))		#执行转换
cv2.imshow('Perspective',img2)  		#显示图像
cv2.waitKey(0)

3.习题4-3:选择一幅图像,对其分别执行均值滤波、高斯滤波、方框滤波、中值滤波和双边滤波等操作。
在这里插入图片描述

#习题4-3.py:选择一幅图像,对其分别执行均值滤波、高斯滤波、方框滤波、中值滤波和双边滤波等操作。
import cv2
import numpy as np
img=cv2.imread('clocktower.png')                            #读取图像
cv2.imshow('original',img)                       	    #显示原图像
##################################################################
#****************************1.均值滤波***************************
##################################################################
img2=cv2.blur(img,(20,20))                              #均值滤波 ksize=(20,20)卷积核大小是20*20
cv2.imshow('blur',img2)
##################################################################
#****************************2.高斯滤波***************************
##################################################################
img2=cv2.GaussianBlur(img,(5,5),0,0)                    #高斯滤波(计算权重) ksize=(5,5),sigmaxX和sigmaxY均为0按照公式计算
cv2.imshow('GaussianBlur',img2)
##################################################################
#****************************3.方框滤波***************************
##################################################################
img2=cv2.boxFilter(img,-1,(3,3),normalize=False)        #方框滤波(是否归一化)False不进行归一化,像素值之和
cv2.imshow('boxFilter',img2)
##################################################################
#****************************4.中值滤波***************************
##################################################################
img2=cv2.medianBlur(img,21)                             #中值滤波(取中间值) 卷积核为21*21
cv2.imshow('medianBlur',img2)
##################################################################
#****************************5.双边滤波***************************
##################################################################
img2=cv2.bilateralFilter(img,20,100,100)                #双边滤波(考虑到距离和色差)   
                                                        #为了简单起见,可以将两个sigma(sigmaColor和sigmaSpace)值设置为相同的。
                                                        # 如果它们的值比较小(例如小于10),滤波的效果将不太明显;如果它们的值较大
                                                        # (例如大于150),则滤波效果会比较明显,会产卡通效果。
cv2.imshow('bilateralFilter',img2)
##################################################################
#****************************6.2D卷积*****************************
##################################################################
k1=np.array([[3,3,3,3,3],[3,9,9,9,3],[3,11,12,13,3],[3,8,8,8,3],
             [3,3,3,3,3],])/25		                    #自定义卷积核1
k2=np.ones((5,5),np.float32)/25	                        #自定义卷积核2 除以25表示用25领域的平均值作为该点的像素
img2=cv2.filter2D(img,-1,k1)                            #2D卷积
cv2.imshow('filter2D K1',img2)
img2=cv2.filter2D(img,-1,k2)
cv2.imshow('filter2D K2',img2)
cv2.waitKey(0)

5.习题4-5:绘制图4-49所示的图像,对其分别执行腐蚀、膨胀等各种形态变换操作。
在这里插入图片描述

#腐蚀、膨胀、开运算
import cv2
import numpy as np
img = cv2.imread('ball.png')
cv2.imshow('original',img)

kernel = np.ones((5,5),np.uint8)    #定义一个5x5的核心
img2 = cv2.erode(img,kernel,iterations=2) #腐蚀操作
img3 = cv2.dilate(img2,kernel,iterations=2) #膨胀操作
op = cv2.MORPH_OPEN 
img4 = cv2.morphologyEx(img,op,kernel,iterations=2) #开运算
#cv2.imshow('erode',img2)
cv2.imshow('dilate',img3)
cv2.imshow('kaiyunsuan',img4)
cv2.waitKey(0)

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

参考

  1. RGB和YCrCb
  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
多媒体计算机技术19春在线作业1-0003 电视或网页中的多媒体广告比普通报刊上广告的最大优势表现在()。 A:多感官刺激 B:超时空传递 C:覆盖范围广 D:实时性好 答案:A 以下可用于多媒体作品集成的软件是()。 A:PowerPoint B:Windows Media Player C:AcdSee D:AfterEffect 答案:A 图像序列中的两幅相邻图像,后一幅图像与前一幅图像之间有较大的相关,这是()。 A:空间冗余 B:时间冗余 C:信息熵冗余 D:视觉冗余 答案:B 看图软件是 () 。 A:Photoship B:ACDSee 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第1页。C:HyperSnap-DX 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第1页。 D:WinZip 答案:B 扫描图像时,输入分辨率常用##PI来表示,它是指 ()。 A:每英寸的点数 B:颜色数 C:每英寸的像素数 D:每厘米的点数 答案:A Authorwre能导入的视频文件格式为:() A:MPEG和MOV B:RM和VI C:MPG和VI D:MOV和VI 答案:C 下列软件中,属于视频编辑软件的有()   (1)Movie Mker (2) Ulead Videostudio (3)##o##e Premiere (4)Photoshop A:仅(1) B:(1) (3) C:(1) (2) (3) D:全部 答案:C 多媒体数据具有()特点。 A:数据量大和数据类型多。 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第2页。B:数据类型问区别大和数据类型少。 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第2页。 C:数据量大、数据类型多、数据类型问区别小、输入和输出不复杂。 D:.数据量大、数据类型多、数据类型问区别大、输入和输出复杂 答案:D 下面 () 不是播入CD片上影视节目的必须设备 A:软驱 B:音频卡 C:视频卡 D:CD-ROM 答案:A 允许用户一次性写入数据,但写入后的状态不能再作修改的是() A:磁光盘 B:硬盘 C:CD-R D:CD-ROM 答案:C 目前多媒体计算机中对动态图像数据压缩常采用 () 。 A:JPEG B:GIF C:MPEG D:BMP 答案:C 林琳同学要制作一个动画,将文字变换为图形,他应该在帧面板中选择() A:运动(motion) 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第3页。B:形状(Shpe) 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第3页。 C:遮罩(Msk) D:逐帧动画 答案:B 多媒体技术能够综合处理下列哪些信息() 龙卷风.mp3 荷塘月色.##o## 发黄的旧照片 泡泡堂.exe 一卷胶卷 A: B: C: D: 答案:B 要将录音磁带上的模拟信号节目存入计算机,一般要使用计算机中的()设备。 A:声卡 B:网卡 C:显卡 D:光驱 答案:A ()是决定多媒体作品视觉效果的关键因素? A:文字 B:图像 C:声音 D:动画 E:、视频 答案:B 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第4页。在音频数字化的过程中,对模拟语音信号处理的步骤依次为()。 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第4页。 A:抽样、量化、编码 B:量化、抽样、编码 C:抽样、编码、量化 D:编码、量化、抽样 答案:A 在进行素材采集时,要获得图形图像,下面哪种方法获得的图片不是位图图像() A:使用数码相机拍得的照片 B:用绘图软件绘制图形图像 C:使用扫描仪扫描杂志上的照片 D:从网络中获得的剪贴画(wmf)文件 答案:D 创作一个多媒体作品的第一步是() A:需求分析 B:修改调试 C:作品发布 D:脚本编写 答案:A 超文本技术提供了另一种对多媒体对象的管理形式,它是一种 ()的信息组织形式。      A A:非线性 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第5页。B:抽象性 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第5页。 C:线性 D:曲线性 答案:A 用Flash制作一个小球沿弧线运动动画。操作步骤如下,正确的是:() 新建一个"图形元件",用椭圆工具在元件的第1帧处画一个小球 新建一个Flsh文件 从库中把"小球"拖到"图层1"的第1帧,并跟引导线的一端重合 点击"增加运动引导层"按钮,在"图层1"上新建一个引导层 用铅笔工具在引导层上画一条平滑的曲线,延长到第40帧,并锁定 测试并保存 在第40帧处按F6插入关键帧,把小球拖到引导线的另一端,与其重合
窗体顶端 一、 选择 .多媒体计算机中的媒体信息是指( D) 。 数字、文字   声音、图形   动画、视频   图像    A B C D 全部 2.多媒体技术的主要特性有(C )。 〔〕多样性 〔2〕集成性 〔3〕交互性 〔4〕可扩充性 A 〔〕 B 〔〕、〔2〕 C 〔〕、〔2〕、〔3〕 D 全部 3.目前音频卡具备以下哪些功能〔 B〕。 录制和回放数字音频文件 混音 语音特征识别 实时解/压缩数字音频文件 A B C D 全部 4.在多媒体计算机中常用的图像输入设备是〔 D〕。 〔〕数码照相机 〔2〕彩色扫描仪 〔3〕视频信号数字化仪 〔4〕彩色摄像机 A 〔〕 B 〔〕〔2〕 C 〔〕〔2〕〔3〕 D 全部 采用了分层的编码体系,提供了四种技术,它们是〔D 〕。 A 空间可扩展性;信噪比可扩充性;框架技术;等级技术。 B 时间可扩充性;空间可扩展性;硬件扩展技术;软件扩展技术。 C 数据分块技术;空间可扩展性;信噪比可扩充性;框架技术。 D 空间可扩展性;时间可扩充性;信噪比可扩充性;数据分块技术。 6.视频卡的种类很多,主要包括〔D 〕。 〔〕视频捕获卡 〔2〕电影卡 〔3〕电视卡 〔4〕视频转换卡 A 〔〕 B 〔〕〔2〕 C 〔〕〔2〕〔3〕 D 全部 7.以PAL制25帧/秒为例,一帧彩色静态图像(RGB)的分辨率为256 256,每一种颜色用6bit表示,那么该视频每秒钟的数据量为〔 A〕。 A 256 256 3 6 25 bps B 52 52 3 8 25 bps C 256 256 3 8 25 bps D 52 52 3 6 25 bps 8.全电视信号主要由〔C 〕组成。 A 图像信号、同步信号、消隐信号。 B 图像信号、亮度信号、色度信号。 C 图像信号、复合同步信号、复合消隐信号。 D 图像信号、复合同步信号、复合色度信号。 9.在视频信号实时处理技术中,如果电视扫描的正程时间为52.2ms,分辨率为52 52 ,实时意味着处理每个像素的时间近似为〔A 〕。 多媒体计算机技术基础及应用-选择题题库全文共7页,当前为第1页。 0.以下哪种说法是正确的〔C 〕。 多媒体计算机技术基础及应用-选择题题库全文共7页,当前为第1页。 A 信息量等于数据量与冗余量之和。B 信息量等于信息熵与数据量之差。 C 信息量等于数据量与冗余量之差。D 信息量等于信息熵与冗余量之和。 .图像序列中的两幅相邻图像,后一幅图像与前一幅图像之间有较大的相关,这是〔 B〕。 A 空间冗余 B 时间冗余 C 信息熵冗余 D 视觉冗余 2.帧频率为25帧/秒的电视制式有〔B 〕。 〔〕PAL 〔2〕SECAM 〔3〕NTSC 〔4〕YUV A ()   B ()(2) C ()(2)(3) D 全部 3.下面哪些是MMX技术的特点〔D 〕。 〔〕 打包的数据类型。 〔2〕 与IA结构完全兼容。 〔3〕 64位的MMX存放储器组。 〔4〕 增强的指令系统。 A 〔〕〔3〕〔4〕 B 〔2〕〔3〕〔4〕 C 〔〕〔2〕〔3〕 D 全部 4.在数字音频信息获取与处理过程中,下述顺序哪个是正确的〔 C〕。 A A/D变换、采样、压缩、存储、解压缩、D/A变换。 B 采样、压缩、A/D变换、存储、解压缩、D/A变换。 C 采样、A/D变换、压缩、存储、解压缩、D/A变换。 D 采样、D/A变换、压缩、存储、解压缩、A/D变换。 5.下面哪一种说法是不正确的〔 C  〕。 A 电子出物存储量大,一张光盘可存储几百本书。 B 电子出物可以集成文本、图形、图像、动画、视频和音频等多媒体信息。 C 电子出物不能长期保存。 D 电子出物检索快。 6.衡量数据压缩技术性能的重要指标是〔C 〕。 〔〕压缩比 〔2〕算法复杂度 〔3〕恢复效果 〔4〕标准化 A ()(3) B ()(2)(3) C ()(3)(4) D 全部 7.以下配置中哪些是MPC必不可少的〔 C〕。 〔〕CDROM驱动器。 〔2〕高质量的音频卡。 〔3〕高分辨率的图形、图像显示。 〔4〕高质量的视频采集卡。 A ()   B ()(2)   C ()(2)(3) D 全部 8.从应用角度来看,在视频会议系统的平安保密中,一个平安密码系统应包含的功能为〔D 〕。〔〕秘密性 〔2〕可验证性 〔3〕完整性 〔4〕不可否认性 A ()(2) B ()(2)(3) C ()(4) D 全部 9.多媒体电子出物创作的主要过程可分为以下哪些步骤〔A 〕。 A 应用目标分析、脚本编写、设计框架、各种媒体数据准备、制作合成、测试。 B 应用目标分析、设计框架、脚本编写、各种媒体数据准备、制作合成、测试。 C 应用目标分析、脚本编写、各种媒体数据准备、设计框架、制作合成、测试。 多媒体计算机技术基础
### 回答1: 《视觉SLAM十四讲》第三章主要介绍了视觉SLAM中的关键技术——特征提取和描述子。本章首先介绍了特征点的概念和特征点的选择原则。特征点即图像中具有鲁棒性和区分度的点,可以通过对其进行检测和描述来进行特征匹配和跟踪。在进行特征提取时,作者介绍了常见的特征检测算法,如Harris角点检测、SIFT和SURF算法等,并对其进行了比较和分析。 接着,本章详细阐述了特征描述子的概念和作用。特征描述子是对特征点周围区域的图像信息进行编码,以实现特征匹配和跟踪。常见的特征描述子包括SIFT、SURF和ORB等。作者从描述子的表示形式、计算方式和匹配方法等方面进行了介绍,并对它们进行了比较和评价。同时,还提到了基于二进制描述子的方法,如BRIEF、BRISK和FREAK等。 在特征匹配方面,本章介绍了特征描述子匹配的基本原理和流程。以基于特征点的视觉SLAM为例,作者详细解释了特征点的匹配过程,包括特征点的选择、特征点描述子匹配和筛选等步骤。并介绍了如何通过验证特征点的三角化和PnP求解来估计相机的位姿。 此外,本章还介绍了一些特定场景下的特征点选择和提取策略,如动态环境下的特征点追踪和关键帧选择等。 综上所述,《视觉SLAM十四讲》第三章主要介绍了特征提取和描述子在视觉SLAM中的重要性和应用。通过对特征点的检测和描述,可以实现特征匹配和跟踪,为后续的相机位姿估计和建图提供基础。该章内容详细且通俗易懂,对于学习和理解视觉SLAM有着重要的指导作用。 ### 回答2: 《视觉SLAM十四讲-Ch3》主要介绍了视觉SLAM(同时定位与建图)技术的基本原理和实现方法。本章主要涵盖了三维几何表示和变换、相机模型和相机姿态以及特征提取与匹配等内容。 首先,本章介绍了三维几何表示和变换的概念。通过介绍欧氏空间中的点、向量和坐标变换,深入解释了相机在三维空间中的位置和朝向的表示方式。同时,引入了齐次坐标和投影矩阵的概念,为后续的相机模型和姿态估计打下了基础。 其次,本章详细讲解了相机模型和相机姿态的原理与应用。其中,介绍了针孔相机模型,分析了图像坐标和相机坐标之间的映射关系。通过投影矩阵的推导,给出了透视投影和仿射投影的公式,并解释了相机焦距和主点的含义。此外,还介绍了如何通过计算相机的外参矩阵来估计相机的姿态,以及如何将图像坐标转换为相机坐标。 最后,本章介绍了特征提取与匹配的技术。首先,介绍了角点和边缘点的概念,以及如何利用差分和梯度计算来检测图像中的角点和边缘点。然后,介绍了如何通过特征描述符来表示图像中的特征点,并通过特征匹配算法找到两幅图像之间的对应关系。特征提取与匹配是视觉SLAM中非常重要的步骤,对于后续的相机定位和建图至关重要。 综上所述,《视觉SLAM十四讲-Ch3》通过系统地介绍了视觉SLAM技术的基本概念和实现方法,包括三维几何表示和变换、相机模型和相机姿态的原理与应用,以及特征提取与匹配的技术。这些内容为读者深入理解和掌握SLAM技术提供了很好的基础。 ### 回答3: 视觉SLAM(Simultaneous Localization and Mapping)是一种通过计算机视觉技术,实现机器智能的同时实时定位和地图构建的方法。在《视觉SLAM十四讲》第三讲中,主要介绍了视觉SLAM的基本概念和关键技术。 首先,讲解了视觉SLAM的理论基础,包括自我运动估计和地图构建两个部分。自我运动估计是通过相邻帧之间的视觉信息,计算相机在三维空间中的运动,从而实现机器的实时定位;地图构建是通过对场景中特征点的观测和跟踪,建立起一个三维空间中的地图。这两个过程相互影响,通过不断迭代优化,实现高精度的定位和地图构建。 接着,讲解了基于特征的视觉SLAM算法。特征提取与描述是建立视觉SLAM系统的关键步骤,通过提取场景中的特征点,并为其生成描述子,来实现特征点的匹配和跟踪。同时,还介绍了一些常用的特征点提取和匹配算法,如FAST、SIFT等。 在SLAM框架方面,本节还介绍了基于视觉的前端和后端优化。前端主要负责实时的特征跟踪和估计相机运动,后端则是通过优化技术,对前端输出的轨迹和地图进行优化求解,从而提高系统的精度和鲁棒性。 最后,本节提到了几个视觉SLAM的应用场景,如自主导航、增强现实等。这些应用对于实时高精度的定位和地图建立都有着很高的要求,因此,视觉SLAM的技术在这些领域有着广泛的应用前景。 总的来说,《视觉SLAM十四讲》第三讲对视觉SLAM的基本概念和关键技术进行了系统的介绍。理论基础、特征提取与描述、SLAM框架和应用场景等方面的内容都给出了详细的解释和案例,有助于读者更好地理解和应用视觉SLAM技术

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值