python 3+opencv 3.4(四)--处理图像

2018-03-31  本文已影响0人  五秋木

一. 高通滤波器:

检测图像的某个区域,然后根据像素和周围像素亮度差值来提升该像素亮度的滤波器--适用于边缘检测。
1. 创建核矩阵,又称为滤波器。核:一组权重的集合。大小为7的核时7*7矩阵。一般滤波器所有值和为0。例如kernal_3x3=np.array([[-1,-1,-1], [-1,8,-1], [-1,-1,-1]])
2.读入图像,灰度图。img=cv2.imread('../data/0.jpg',0)
3. 使用核与图像进行卷积,使用scipy中ndimage.convolve函数。得到的结果就是和源图像相同大小的矩阵。其中进行卷积的运算,运算规则参考文章:卷积神经网络简介
4. 显示出卷积后的图像,先创建窗口,重设窗口大小,显示图片,关闭窗口。结果如下:

卷积
5. 代码如下:
 import cv2
 import numpy as np
 from scipy import ndimage
 #这个是滤波器使用的模板矩阵
 kernal_3x3=np.array([[-1,-1,-1],
                  [-1,8,-1],
                  [-1,-1,-1]
                  ])


 kernal_5x5=np.array([[-1,-1,-1,-1,-1],
                  [-1,1,2,1,-1],
                  [-1,2,4,2,-1],
                  [-1,1,2,1,-1],
                  [-1,-1,-1,-1,-1]
                  ])

 img=cv2.imread('../data/0.jpg',0) #以灰度的方式加载图片

 #通过使用模板矩阵进行高通滤波
 k3=ndimage.convolve(img, kernal_3x3) 

 k5=ndimage.convolve(img,kernal_5x5)

 #使用OpenCV的高通滤波
 blurred = cv2.GaussianBlur(img,(11,11),0)
 g_hpf=img-blurred
 cv2.namedWindow("origin picture", cv2.WINDOW_NORMAL) # 初始化一个名为Image的窗口
 cv2.resizeWindow("origin picture", 400, 600);
 cv2.namedWindow("k3", cv2.WINDOW_NORMAL) # 初始化一个名为Image的窗口
 cv2.resizeWindow("k3", 400, 600);
 cv2.namedWindow("k5", cv2.WINDOW_NORMAL) # 初始化一个名为Image的窗口
 cv2.resizeWindow("k5", 400, 600);
 cv2.namedWindow("blurred", cv2.WINDOW_NORMAL) # 初始化一个名为Image的窗口
 cv2.resizeWindow("blurred", 400, 600);
 cv2.namedWindow("g_hpf", cv2.WINDOW_NORMAL) # 初始化一个名为Image的窗口
 cv2.resizeWindow("g_hpf", 400, 600);
 cv2.imshow('origin picture',img)
 cv2.imshow('k3',k3)
 cv2.imshow('k5',k5)
 cv2.imshow('blurred',blurred)
 cv2.imshow('g_hpf',g_hpf)
 cv2.waitKey(0)
 cv2.destroyAllWindows()

二、低通滤波器

像素和周围像素的亮度差值小于一个特定值时,平滑该像素的亮度,用于降噪和模糊化。

三、边缘检测

边缘检测滤波函数:Laplacian() Sobe() Scharr(),将非边缘部分转化为黑色,边缘区域转化为白色或者其他饱和的颜色。但容易将噪声错误识别为边缘,故要进行模糊处理。函数有:blur()(简单算数平均)medianBlur() 以及GaussionBlur() 。
具体代码和实现效果待学习~~

上一篇下一篇

猜你喜欢

热点阅读