python使用opencv3 02 使用opencv3处理图像的基础(根据《opencv3 计算机视觉 python语言实现》总结)
处理图片的一些基础知识
高通滤波器:检测图像的某个区域,然后根据像素与周围像素的亮度差值来提升该像素的亮度的滤波器。
低通滤波器:在像素与周围像素的亮度差值小于一个特定值时,平滑该像素的亮度。
卷积矩阵:又可以称为卷积核或是核。卷积矩阵是一个二维数组,有奇数行和奇数列,中心的元素对应于感兴趣的像素,其他的元素对应于这个像素周围的邻近像素,每个元素都有一个整数或浮点数的值,这些值就是应用在像素值上的权重。
值得一提的是opencv3大部分的滤波器都是使用某种卷积核得来的所以滤波操作和卷积运算是有一定的共同点的。
滤波步骤:
- 对原始图像的边缘进行某种方式的填充(一般为0填充)。
- 将掩膜划过整幅图像,计算图像中每个像素点的滤波结果。
- 180度翻转卷积核。
- 不做边界填充,直接对图像进行相应位置乘积和。
提示:如果不对卷积运算进行填充的话,在对整张图片进行卷积运算时会出现图片四周丢失像素的情况。
关于滤波操作和卷积运算参考博客原地址:https://blog.csdn.net/haoji007/article/details/53911940
接着开始介绍一些相关的函数
cv2.medianBlur(参数1,参数2)参数1为数字矩阵,表示需要输入的图像源。参数2为数字,滤波尺寸的大小(必须为奇数)
函数的作用:作为模糊函数,它对去除数字化的视频噪声非常有效,特别是去除彩色图像的噪声。基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,让周围的像素值接近真实的值从而消除孤立的噪声点。返回值为处理以后的图像矩阵。
cv2.cvtColor(参数1,参数2)参数1为数字矩阵,表示需要输入的图像源。参数2为内部参数,表示需要转化的模式(比如cv2.COLOR_BGR2GRAY表示BGR转化成灰度图)
函数的作用:将图像源做指定的处理,返回处理后的数字矩阵。(会对所有通道使用相同的核)
cv2.threshold(参数1,参数2,参数3,参数4)参数1为数字矩阵,表示需要输入的图像源。参数2为数字,表示一个阈值。参数3为数字,表示超过阈值后的填充色。参数4为数字,表示阈值转化的模式。
函数的作用:将图片按照设定的阈值进行二值化(例如高于阈值为黑色,低于阈值为白色,处理以后就得到一个黑白图像)。该函数有两个返回值,第一个retVal(得到的阈值值(在后面的某个方法中会用到)),第二个就是阈值化后的图像。
另外关于本函数的详细参考:https://blog.csdn.net/JNingWei/article/details/77747959
cv2.findContours(参数1,参数2,参数3)参数1为图像源(一个八位二进制的二值图像),参数2为内置参数,轮廓检索的模式,参数3为内部函数,轮廓近似方法。
函数的作用:按照函数的参数在图片上进行轮廓的检索。返回值依次是检测到的轮廓(列表形式,以点向量表示),检测到的轮廓包括关系。
注意:该函数会修改原图。故常用img.copy()函数。
cv2.canny(参数1,参数2,参数3)参数1为数字矩阵(图像源),表示需要处理的图像源。参数2为数字,表示低阈值。参数3为数字,表示高阈值。
函数的作用:进行边缘检测(高斯滤波,计算梯度,非最大抑制,双阈值去假阳性,最后根据线段的连接情况消除不明显的边缘),返回值为检测后的二值图像。
cv2.drawContours(参数1,参数2,参数3,参数4,参数5)参数1为数字矩阵(图像源),表示需要处理的图像源。参数2为findContours函数返回的轮廓参数,参数3为数字,表示画第几个轮廓,-1表示画出所有轮廓。参数4为三个元素的元组,表示轮廓的RGB值。参数5为数字,表示轮廓的宽度。
函数的作用:将检测到的边框轮廓显示出来,返回值是显示边框后的图片。
注意:该函数会修改原图。故常用img.copy()函数。
cv2.boundingRect(参数1)参数1为findContours函数返回的轮廓参数,表示需要处理的图像源。
函数作用:返回检测到的轮廓左上角坐标和宽高(一共返回4个数字类型的参数)。
cv2.rectangle(参数1,参数2,参数3,参数4,参数5)参数1为数字矩阵(图像源),参数2为(x,y)是矩阵的左上点坐标,参数3为(x+w,y+h)是矩阵的右下点坐标,参数4为(0,255,0)是画线对应的rgb颜色,参数5为所画的线的宽度。
函数的作用:将找到的边框画出来,直接在原图上画,无返回值。
cv2.pyrDown()
函数作用:先对图像进行高斯平滑,然后再进行降采样(将图像尺寸行和列方向缩减一半)。