opencv4 傅里叶变换

傅里叶变换

① 高频:变化剧烈的灰度分量,例如边界礁石。

② 低频:变化缓慢的灰度分量,例如一片大海。

③ 高通滤波器:只保留高频,会使得图像细节增强。高频边界锐化了,增强了,细节更明显了。

④ 低通滤波器:只保留低频,会使得图像模糊。低频信息保留下来了,高频信息没了,图像边界会变得模糊了。

① opencv 中主要就是 cv2.dft() 执行傅里叶变换到频域中 和 cv2.idft() 执行逆傅里叶变换,输入图像需要先转换成 np.float32 格式。

② 得到的结果中频率为 0 的部分会在左上角,通常要转换到中心位置,可以通过 shift 变换来实现。

③ cv2.dft() 返回的结果是双通道的 ( 实部,虚部 ),通常还需要转换成图像格式才能展示(0,255)像素值。

ffshit

numpy.fft.fftshift() 函数是用来将一维或多维的数组进行循环移位(cyclic shift)操作,从而使得数据集的原点(中心点)从数组的开始位置移动到中间位置,便于进行傅里叶变换等操作。

具体来说,对于一维的实数或复数序列,numpy.fft.fftshift() 函数将其进行循环移位操作,将左半边的数据移到了右边,将右半边的数据移到了左边。而对于多维的数组,numpy.fft.fftshift() 函数则将其进行多维循环移位操作,保证每个维度上的数据都被移动到了中心位置。

举个例子,假设有一个长度为 N 的一维实数序列 x,其中 N 是偶数。那么按照 numpy.fft.fftshift() 的规则,可以将序列 x 划分为两部分:左半部分包括 x[N/2], x[N/2+1], …, x[N-1];右半部分包括 x[0], x[1], …, x[N/2-1]。然后,在执行 numpy.fft.fftshift(x) 操作时,函数会将左半部分移到右边,将右半部分移到左边,得到新的序列 x’。此时,x’[0] = x[N/2], x’[1] = x[N/2+1], …, x’[N/2-1] = x[N-1],x’[N/2] = x[0], x’[N/2+1] = x[1], …, x’[N-1] = x[N/2-1]。因此,numpy.fft.fftshift(x) 函数的作用就是将原始序列 x 在频域上进行循环移位操作,使得序列中心点移到了序列的开始位置,方便进行傅里叶变换等操作。

需要注意的是,numpy.fft.fftshift() 函数默认将原始序列的中心点移到了数组的开始位置,如果需要将中心点移到数组的结束位置,可以使用 numpy.fft.ifftshift() 函数进行逆向的移位操作。

低通高通

低通保留图像整体的,丢失边界
高通边界信息

总体流程与方法讲解

opencv4 傅里叶变换_第1张图片
拿卡上的数字不断到数字模板中匹配

提取数字

https://blog.csdn.net/qq_40784418/article/details/105586644

轮廓检测
外接矩形
外轮廓
resize操作
轮廓过滤操作,比如说数字轮廓长宽比列是差不多的,直接去除不符合的

环境配置与预处理

opencv4 傅里叶变换_第2张图片
终端参数
opencv4 傅里叶变换_第3张图片
opencv4 傅里叶变换_第4张图片
路径指定好了
apply后确定

处理过程

opencv4 傅里叶变换_第5张图片
opencv4 傅里叶变换_第6张图片
opencv4 傅里叶变换_第7张图片
-1表示画出所有轮廓

轮廓进行排序

opencv4 傅里叶变换_第8张图片
外接矩形,用矩形的x坐标点排序,函数返回排序完的轮廓

继续

i为数值,c为轮廓
opencv4 傅里叶变换_第9张图片
这里估计就是统一不同数字的轮廓大小
ref是黑白图

信用卡 代码

https://blog.csdn.net/m0_52054107/article/details/114239739

信用卡图片

图片上有很多干扰项,处理起来没模板简单

你可能感兴趣的:(opencv,python,计算机视觉)