您当前的位置: 首页 >  Python

不脱发的程序猿

暂无认证

  • 1浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python+OpenCV图像处理实验

不脱发的程序猿 发布时间:2020-05-05 17:21:12 ,浏览量:1

目录

1、灰度化功能

2、反转功能

3、通道分离功能

4、噪音、滤波功能

5、高斯双边滤波功能

6、均值偏移滤波功能

7、图像二值化功能

8、Canny边缘检测功能

9、直线检测功能

10、圆形检测功能

11、轮廓发现功能

12、人脸检测功能

这个项目是我在GitHub上看到的,和我之前的Python+OpenCV实时图像处理,异曲同工,只不过是我对实时视频的处理,这个是图像处理,功能上感觉这个项目更加全面一些,特学习并分享~

该项目可实现图像的多样化处理,基本上包含了OpenCV模块常用的图像处理功能,非常适合初学者理解和应用,包括:灰度化功能、反转功能、通道分离功能、噪音滤波功能、高斯双边滤波功能、均值偏移滤波功能、图像二值化功能、Canny边缘检测功能、直线检测功能、圆形检测功能、轮廓发现功能和人脸检测功能。

1、灰度化功能

灰度化功能,效果如下所示:

实现代码如下所示:

    # 灰度化
    def to_gray(self):
        src = self.cv_read_img(self.src_file)
        if src is None:
            return
        gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
        # print("类型", type(gray))
        # get_image_info(gray)
        self.decode_and_show_dst(gray)
2、反转功能

反转功能,按位取反,白变黑,黑变白,效果如下所示:

实现代码如下所示:

    # 反转
    def bitwise_not(self):
        src = self.cv_read_img(self.src_file)
        if src is None:
            return
        dst = cv.bitwise_not(src)  
        self.decode_and_show_dst(dst)
3、通道分离功能

通道分离功能,效果如下所示:

实现代码如下所示:

    # 通道分离
    def channels_split(self):
        src = self.cv_read_img(self.src_file)
        if src is None:
            return
        b, g, r = cv.split(src)
        merge_image = cv.merge([b, g, r])
        """创建三维数组,0维为B,1维为G,2维为R"""
        height, width, channels = src.shape
        img = np.zeros([height*2, width*2, channels], np.uint8)
        img[0:height, 0:width] = np.expand_dims(b, axis=2)
        img[0:height, width:width*2] = np.expand_dims(g, axis=2)
        img[height:height*2, 0:width] = np.expand_dims(r, axis=2)
        img[height:height*2, width:width*2] = merge_image

        self.decode_and_show_dst(img)
4、噪音、滤波功能

图像处理中噪声:主要有三种:

  • 椒盐噪声(Salt & Pepper):含有随机出现的黑白亮度值。
  • 脉冲噪声:只含有随机的正脉冲和负脉冲噪声。
  • 高斯噪声:含有亮度服从高斯或正态分布的噪声。高斯噪声是很多传感器噪声的模型,如摄像机的电子干扰噪声。

滤波器主要两类:线性和非线性

  • 线性滤波器:使用连续窗函数内像素加权和来实现滤波,同一模式的权重因子可以作用在每一个窗口内,即线性滤波器是空间不变的。

如果图像的不同部分使用不同的滤波权重因子,线性滤波器是空间可变的。因此可以使用卷积模板来实现滤波。线性滤波器对去除高斯噪声有很好的效果。常用的线性滤波器有均值滤波器和高斯平滑滤波器。

(1) 均值滤波器:最简单均值滤波器是局部均值运算,即每一个像素只用其局部邻域内所有值的平均值来置换。

(2) 高斯平滑滤波器是一类根据高斯函数的形状来选择权值的线性滤波器。 高斯平滑滤波器对去除服从正态分布的噪声是很有效的。

  • 非线性滤波器:

(1) 中值滤波器:均值滤波和高斯滤波运算主要问题是有可能模糊图像中尖锐不连续的部分。中值滤波器的基本思想使用像素点邻域灰度值的中值来代替该像素点的灰度值,它可以去除脉冲噪声、椒盐噪声同时保留图像边缘细节。中值滤波不依赖于邻域内与典型值差别很大的值,处理过程不进行加权运算。中值滤波在一定条件下可以克服线性滤波器所造成的图像细节模糊,而对滤除脉冲干扰很有效。

(2) 边缘保持滤波器:由于均值滤波:平滑图像外还可能导致图像边缘模糊和中值滤波:去除脉冲噪声的同时可能将图像中的线条细节滤除。边缘保持滤波器是在综合考虑了均值滤波器和中值滤波器的优缺点后发展起来的,它的特点是:滤波器在除噪声脉冲的同时,又不至于使图像边缘十分模糊。

过程:分别计算[i,j]的左上角子邻域、左下角子邻域、右上角子邻域、右下角子邻域的灰度分布均匀度V;然后取最小均匀度对应区域的均值作为该像素点的新灰度值。分布越均匀,均匀度V值越小。v=

关注
打赏
1664101891
查看更多评论
立即登录/注册

微信扫码登录

0.1234s