图像几何变换,形态学,图片平滑等内容讲解
树图思维导图提供 OpenCV思维脑图 在线思维导图免费制作,点击“编辑”按钮,可对 OpenCV思维脑图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:3360d39efe316632748ed7ea595a1f98
OpenCV思维导图模板大纲
cv.imread()
读取图像
要读取的对象
读取方式
cv.IMREAD*COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默认参数
可以用“1”替代
cv.IMREAD*GRAYSCALE:以灰度模式加载图像
可以用“0”替代
cv.IMREAD_UNCHANGED:包括alpha通道的加载图像模式。
可以用“-1”替代
例子:img = cv.imread('messi5.jpg',0)
cv.imshow()
显示图像
显示图像的窗口名称,以字符串类型表示
要加载的图像
例子: cv.imshow('image',img) cv.waitKey(0) # matplotlib中展示 plt.imshow(img[:,:,::-1])
cv.imwrite()
保存图像
文件名,要保存在哪里
要保存的图像
例子:cv.imwrite('messigray.png',img)
图像缩放
cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)
src : 输入图像
dsize: 绝对尺寸,直接指定调整后图像的大小
fx,fy: 相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可
interpolation:插值方法
图像平移
cv.warpAffine(img,M,dsize)
dsize: 输出图像的大小
M: 2∗3移动矩阵
img: 输入图像
图像旋转
cv2.getRotationMatrix2D(center, angle, scale)
center:旋转中心
angle:旋转角度
scale:缩放比例
仿射变换
调用cv.getAffineTransform将创建变换矩阵,最后该矩阵将传递给cv.warpAffine()进行变换
在仿射变换中,原图中所有的平行线在结果图像中同样平行。为了创建这个矩阵我们需要从原图像中找到三个点以及他们在输出图像中的位置。然后cv2.getAffineTransform 会创建一个 2x3 的矩阵,最后这个矩阵会被传给函数 cv2.warpAffine。
透射变换
通过函数cv.getPerspectiveTransform()找到变换矩阵,将cv.warpPerspective()进行投射变换
在opencv中,我们要找到四个点,其中任意三个不共线,然后获取变换矩阵T,再进行透射变换。通过函数cv.getPerspectiveTransform找到变换矩阵,将cv.warpPerspective应用于此3x3变换矩阵
图像金字塔
cv.pyrUp(img)
对图像进行上采样
cv.pyrDown(img)
对图像进行下采样
连通性
连通性是描述区域和边界的重要概念
两个像素连通的两个必要条件是
两个像素的位置是否相邻
两个像素的灰度值是否满足特定的相 似性准则(或者是否相等
有4联通、8联通和m联通三种
4联通:对于具有值V的像素p和q,如果q在集合N4(p)中,则称这两个像素是4连通
8联通:对于具有值V的像素p和q,如果q在集 合N8(p)中,则称这两个像素是8连通。
对于具有值V的像素p和q,如果
q在集合 N 4 (p)中
子主题 1
q在集合 N D (p)中,并且 N 4 (p)与 N 4 (q)的交集为空(没有值 V的像素)
形态学操作
腐蚀
cv.erode(img,kernel,iterations)
img: 要处理的图像
kernel: 核结构
iterations: 腐蚀的次数,默认是1
膨胀
cv.dilate(img,kernel,iterations)
img: 要处理的图像
kernel: 核结构
iterations: 腐蚀的次数,默认是1
开运算
开运算是先腐蚀后膨胀,其作用是:分离物体,消除小区域。特点:消除噪点,去除小的干扰块,而不影响原来的图像。
闭运算
闭运算与开运算相反,是先膨胀后腐蚀,作用是消除/“闭合”物体里面的孔洞,特点:可以填充闭合区域。
礼帽运算
原图像与开运算之差
黑帽运算
闭运算与原图像之差
图像噪声
椒盐噪声
椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。椒盐噪声的成因可能是影像讯号受到突如其来的强烈干扰而产生、类比数位转换器或位元传输错误等。
高斯噪声
高斯噪声是指噪声密度函数服从高斯分布的一类噪声。由于高斯噪声在空间和频域中数学上的易处理性,这种噪声(也称为正态噪声)模型经常被用于实践中。
图像平滑
均值滤波
cv.blur(src, ksize, anchor, borderType)
src:输入图像
ksize:卷积核的大小
anchor:默认值 (-1,-1) ,表示核中心
borderType:边界类型
均值滤波的优点是算法简单,计算速度较快,缺点是在去噪的同时去除了很多细节部分,将图像变得模糊。
高斯滤波
cv2.GaussianBlur(src,ksize,sigmaX,sigmay,borderType)
src: 输入图像
ksize: 高斯卷积核的大小 注意 : 卷积核的宽度和高度都应为奇数,且可以不同
sigmaX: 水平方向的标准差
sigmaY: 垂直方向的标准差,默认值为0,表示与sigmaX相同
borderType:填充边界类型
高斯平滑在从图像中去除高斯噪声方面非常有效。
中值滤波
cv.medianBlur(src, ksize )
src:输入图像
ksize:卷积核的大小
中值滤波是一种典型的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值。
原理
直方图是对数据进行统计的一种方法,并且将统计值组织到一系列实现定义好的 bin 当中。其中, bin 为直方图中经常用到的一个概念,可以译为 “直条” 或 “组距”,其数值是从数据中计算出的特征统计量,这些数据可以是诸如梯度、方向、色彩或任何其他特征。
术语和细节
dims:需要统计的特征数目。在上例中,dims = 1 ,因为仅仅统计了灰度值。
bins:每个特征空间子区段的数目,可译为 “直条” 或 “组距”,在上例中, bins = 16。
range:要统计特征的取值范围。在上例中,range = [0, 255]。
直方图的计算和绘制直方图的计算和绘制
cv2.calcHist(images,channels,mask,histSize,ranges[,hist[,accumulate]])
images: 原图像。当传入函数时应该用中括号 [] 括起来,例如:[img]。
channels: 如果输入图像是灰度图,它的值就是 [0];如果是彩色图像的话,传入的参数可以是 [0],[1],[2] 它们分别对应着通道 B,G,R。
mask: 掩模图像。要统计整幅图像的直方图就把它设为 None。但是如果你想统计图像某一部分的直方图的话,你就需要制作一个掩模图像,并使用它。
histSize:BIN 的数目。也应该用中括号括起来,例如:[256]。
ranges: 像素值范围,通常为 [0,256]
掩膜的应用
掩膜是用选定的图像、图形或物体,对要处理的图像进行遮挡,来控制图像 处理的区域。
原理与应用
“直方图均衡化”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在更广泛灰度范围内的分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。
dst = cv.equalizeHist(img)
img: 灰度图像
参数
dst : 均衡化后的结果
返回
自适应的直方图均衡化
cv.createCLAHE(clipLimit, tileGridSize)
clipLimit: 对比度限制,默认是40
tileGridSize: 分块的大小,默认为8∗8
整幅图像会被分成很多小块,这些小块被称为“tiles”(在 OpenCV 中 tiles 的 大小默认是 8x8),然后再对每一个小块分别进行直方图均衡化。
则称这两个像素是m连通的,即4连通和D连通的混合连通思维导图模板大纲
cv.morphologyEx(img, op, kernel)思维导图模板大纲
img: 要处理的图像
若进行开运算,则设为cv.MORPH_OPEN
若进行闭运算,则设为cv.MORPH_CLOSE
若进行礼帽运算,则设为cv.MORPH_TOPHAT
若进行黑帽运算,则设为cv.MORPH_BLACKHAT
Kernel: 核结构
树图思维导图提供 1107文家市玉萍思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 1107文家市玉萍思维导图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:ed943ef641f6dc874860eb6095857ed6
树图思维导图提供 种子思维脑图 在线思维导图免费制作,点击“编辑”按钮,可对 种子思维脑图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:86f8307a40ea24607c6c79354e09377f