opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度、BRG、HSV(Hue-Saturation-Value)
傅里叶变换的概念是许多常见的图像处理操作的基础,比如边缘检测或线段和形状检测。
高通滤波器(HPF)是检测图像的某个区域,然后根据像素与周围像素的亮度差值来提升(boost)该像素的亮度的滤波器。
高通滤波器在边缘检测非常有效,它会采用一种称为高频提升滤波器(high boost filter)的高通滤波器。
首先给出一个例子
import cv2 import numpy as np from scipy import ndimage kernel_3 = np.array([ [-1, -1, -1], [-1, 8, -1], [-1, -1, -1] ]) kernel_5 = 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(‘small.jpg‘, 0) print(help(cv2.imread)) k3 = ndimage.convolve(img, kernel_3) k5 = ndimage.convolve(img, kernel_5) blurred = cv2.GaussianBlur(img, (11, 11), 0) g_hpf = img - blurred cv2.imshow(‘3*3‘, k3) cv2.imshow(‘5*5‘, k5) cv2.imshow(‘g_hpf‘, g_hpf) cv2.waitKey() cv2.destroyAllWindows()
运行可以得到如下图:
代码分析:
1)导入模块后,定义了核。
核,是指一组权重的积核,将它应用在源图像的一个区域,并由此生成目标图像的一个像素。
2)在cv2.imread()中的参数 0 。主要是将其转换为单通道灰度图像。详见 OpenCV 学习笔记 02 处理文件、摄像头和图形用户界面
cv2.IMREAD_GRAYSCALE = 0 如果设置,则始终将图像转换为单通道灰度图像。
3)对于给定核与图像的“ 卷积 convole ” 而言,numpy 在多维数组卷积运算时较为复杂(一维数组完成可以胜任),scipy 的 convolve() 函数可解决完美地解决该问题。
4)最后一种高通滤波器的实现方法有两步;第一步对图像应用低通滤波器,第二步再对与原始图像计算差值。
5)不难发现,第三种效果最好。
高通滤波器是根据像素与临近像素的亮度差值来提升该像素的亮度;
低通滤波器(Low Pass Filter, LPF)的实现原理是在像素与周围像素的亮度差值小于一个特定值时,平滑该像素的亮度。该法主要应用于去噪和模糊化;其中,高斯模糊是最常用的模糊滤波器(平滑滤波器)之一,它是一个削弱高频信号强度的低通滤波器。
原文:https://www.cnblogs.com/gengyi/p/10226862.html