新闻资讯
Python+OpenCV计算机视觉全面基础概述(上篇)
1.导入图像,显示图像,保存图像:
2.图像基本内容
图像由像素构成;图像一般分成三类:二值图像(只有黑和白,值要不是0要不是1);灰度图像(还有灰,最小值为0:纯黑;最大值为255:纯白;中间值为灰色);RGB(彩色,三个值-R,G,B每一份值都在0-255之间:(234,252,4),在OpenCV里通道顺序为:BGR(4,252,234))
RGB转灰度:(RGB每个位置都有3个值,但灰度图像每个位置只有一个值)通过加权运算将原始图像中的RGB通道进行运算最后组成灰度图像,确保三个值的信息都留在灰度图像中(因此不会丢失信息)。
3.处理,修改像素:
在多个通道改变像素值:
利用numpy包进行像素处理
item函数读取像素,itemset函数修改像素
i.item(100,100,0)
i.itemset((100,100,0),255)//将第0个通道(100,100)的位置值修改为255。
4.获取图像属性:形状(行,列,通道数),像素数目,图像的数据类型
形状:shape
像素数目:size 灰度:行数*列数; 彩色:行数*列数*通道数
图像类型:dtype(返回图像数据类型) ##uint8
5.图像ROI(region of interest)-感兴趣区域
6.通道的拆分与合并
拆分split :将3个通道独立出来
合并merge:将三个通道合并成彩色通道
指定提取的通道则在后面加上下标:split(a)[0]
7.图像加法运算
参与运算的图像大小类型必须一致
numpy加法(取模加法)
opencv加法(饱和运算)
8.图像融合
(将2张及以上图像信息融合到1张图像上)可将几张不清晰图片融合成1张清晰图像——addWeighted
若不需要调亮,则gamma为0。
9.图像类型转换
彩色-灰度:GBR-RGB
cv2.COLOR_GBR2GRAY:彩色转灰度
cv2.COLOR_GRAY2GBR:灰度转彩色(通道数变成3)
cv2.COLOR_BGR2RGB:通道间转换
10.图像缩放:resize
(122,122)第一个是列,第二个是行;
f(x)水平方向上,f(y)垂直方向上;
直接指定大小:
按照比例缩放:列为0.5倍,行为1.2倍 由于可能不是整数所有要用round对其四舍五入:
先设置行,后设置列,行为0.5倍,列为0.3倍:
11.图像翻转:flip
flipCode=0:以x为对称轴上下翻转
flipCode>0:以y轴为对称轴左右翻转
flipCode<0:先水平翻转,再左右翻转
12.阈值分割基础理论
5种阈值化处理:
二进制阈值化:比阈值大的设置为最大值,小设置为0;
反二进制阈值化:比阈值大的设为0,小设置为最大值;
截断阈值化:比阈值大的像素都处理成阈值;
反阈值化为0:大于阈值的像素为0,小于等于不变;
阈值化为0:大于阈值则不变,小于阈值则值变为0
13.图像阈值:threshold函数
二进制阈值化:cv2.THRESH_BINARY
(不一定是0,1构成的图像也有可能是其他值)
反二进制阈值化:cv2.THRESH_BINARY_INV
截断阈值化:cv2.THRESH_TRUNC
阈值化为0:cv2.THRESH_TOZERO
反阈值化为0:cv2.THRESH_TOZERO_INV
归纳:
14.图像平滑:均值滤波
cv2.blur(原始图像,核大小)——核大小:以(宽度,高度)形式表示的元组;
经过均值滤波处理后的图像更加平滑;
15.图像平滑:方框滤波 boxFilter
目标图像深度:int类型的目标图像深度。通常用”-1”表示与原始图像一致;
若均值滤波进行归一化处理则和均值滤波相同,若不进行归一化处理则是求当前像素周围若干个像素的和(很有可能得到纯白色图像(溢出));
16.图像滤波:高斯滤波:GaussianBlur
一般情况下令sigmaX=0 : sigma=0.3*((ksize-1)*0.5-1)+0.8
17.图像平滑:中值滤波:medianBlu
18.形态学转换:图像腐蚀:erode
一般针对二值图像,两个输入对象:输入对象、卷积核
核一般为正方形,迭代次数默认为1:
19. 形态学转换:图像膨胀-图像腐蚀的逆操作dilate
对腐蚀过的图像进行膨胀处理可以去除噪声并保持原有形状:
20.图像开运算:morphologyEx
开运算(image)=膨胀(腐蚀(image))
21.图像闭运算:morghologyEx
闭运算(image)=腐蚀(膨胀(image))
22.图像礼帽tophat:morphologyEx
礼帽图像=原始图像-开运算图像:得到噪声图像
23.图像黑帽:morphologyEx
闭运算图像-原始图像:得到图像内部的小孔或者前景色中的小黑点
24.图像梯度:Sobel算子的理论基础
计算水平方向的边界:
计算垂直方向的边界:
近似梯度值(Sobel算子):
25. Sobel算子函数及其使用:Sobel
深度说明:深度一般设为-1(未取绝对值)
在边界处左边像素值与右边像素值不同,相减得到差值,因此能够提取边界。而若直接计算左边边界作差右边像素-左边像素值为负则会按0处理,右边边界作差右边像素值-左边像素值值为正,因此需要求取绝对值,求取每一点的水平梯度则得到一条线。
把负数的值转换为绝对值-目标图像=cv2.convertScaleAbs(原始图像)
dx,dy说明:
计算x方向梯度:dx=1,dy=0
计算y方向梯度:dx=0,dy=1
计算Sobel结果:
x方向梯度:
y方向梯度:
将x,y方向的梯度共同计算:
直接设置dx,dy=1利用sobel算子提取边界效果不理想:
26.scharr算子函数及其使用
scharr是sobel算子的一种改进
27.Laplacian函数及其使用
cv2.Laplacian(src,ddepth)
拉普拉斯算子类似于二级sobel导数:
卷积核为:
28.canny边缘检测原理
去噪-梯度-非极大值抑制-滞后阈值处理
去噪:
梯度:
计算值和角度:
梯度方向被归为4类:垂直、水平和对角线。
非极大值抑制:
(把不是边界的点去除)逐个遍历像素点,判断当前像素带你是否是周围像素点中具有相同方向梯度的最大值。
滞后阈值处理:
29.canny函数及其使用
cv2.Canny(image,threshold1,threshold2)
threshhold1:minVal阈值; threshold2:maxVal阈值
若想要边界丰富就将两个阈值设置地小一些;
回复列表