新闻资讯

新闻资讯 媒体报道

Python+OpenCV计算机视觉全面基础概述(上篇)

编辑:011     时间:2021-11-22

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阈值

若想要边界丰富就将两个阈值设置地小一些;

编辑于 08-28 10:32
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐