opencv+python+数字图像处理入门5/29

实现频率域滤波(理想,布特沃斯,高通

import cv2
import numpy as np
import matplotlib.pyplot as plt



def filteryy(img,F,N=2,type='lp',filter='butter'):
    '''
    构建filteryy函数
    :param img: 图片显示
    :param F: 设置滤波器的截止频率
    :param N: 滤波器阶数,默认2阶
    :param type: lp低通,hp为高通
    :param filter:butter为布特沃斯,ideal为理想滤波器,gaussian为高斯滤波器
    :return:imgyy,输出的图像
    '''

    img32 = np.float32(img)  # 先用np函数转成float32类型
    dft=np.fft.fft2(img32)   #np函数dft
    fshift=np.fft.fftshift(dft)  #零分量转到频域中心

    h,w=img.shape  #获得img的尺寸,长宽
    ch,cw=int(h/2),int(w/2)    #计算频谱中心
    mask=np.zeros((h,w,2))  #生成二维的h行w列的全零二维矩阵

    for i in range(h):
        for j in (w):
            Duv=np.sqrt((i-ch)**2+(j-cw)**2)   #计算DUV
            if(filteryy.filter)=='butter':
                if(type=='lp'):
                    mask[i,j]=1/(1+(Duv/F))**(2*N)
                elif(type=='hp'):
                    mask[i,j]=1/(1+(F/Duv))**(2*N)
                else:
                    assert('错了错了')   #空或错
            elif(filteryy.filter)=='ideal':
                if (type == 'lp'):
                    if(Duv<=F):
                      mask[i, j] = 1
                elif (type == 'hp'):
                    if(Duv>F):
                      mask[i, j] = 1
                else:
                    assert ('错了错了')  # 空或错
            if(filteryy.filter) == 'gaussian':
                    if (type == 'lp'):
                        mask[i, j] =np.exp(-(Duv*Duv)/(2*F*F))
                    elif (type == 'hp'):
                        mask[i, j] =(1-np.exp(-(Duv*Duv)/(2*F*F)))
                    else:
                        assert ('错了错了')  # 空或错


    iishift=fshift*mask  #频率域相乘等于空间域卷积嘛
    iiishift=np.fft.ifftshift(iishift)
    imgyy=cv2.idft(iiishift)   #idft
    imgyy=cv2.magnitude(imgyy[:,:,0],imgyy[:,:,1])  #计算剃度绝对值
    imgyy=np.abs(imgyy)
    return imgyy    #函数设置返回值,返回图像哦

img = cv2.imread('D:/lena.jpg',0)  #取灰度图像
plt.plot(221)
plt.imshow(img,plt.cm.gray)
plt.title('yuantu')
plt.xticks([])
plt.yticks([])   #x,y坐标轴位置

imgy_1=filteryy(img,30,type='lp',filter='ideal')
plt.plot(222)
plt.imshow(imgy_1,plt.cm.gray)
plt.title('理想lvboqi')
plt.xticks([])
plt.yticks([])   #x,y坐标轴位置

imgy_2=filteryy(img,30,type='lp',filter='gaussian')
plt.plot(223)
plt.imshow(imgy_2,plt.cm.gray)
plt.title('gaosilvboqi')
plt.xticks([])
plt.yticks([])   #x,y坐标轴位置

imgy_3=filteryy(img,30,type='lp',filter='butter')
plt.plot(224)
plt.imshow(imgy_3,plt.cm.gray)
plt.title('butewosilvboqi')
plt.xticks([])
plt.yticks([])   #x,y坐标轴位置

plt.show()

今日菜鸟教程:写一个循环语句,读到aaa跳出循环,否则输出,读不到的就没有数据
list=['ahb',2006,'yg',652,'aaa']
for i in list:
    if i =='aaa':
        print('对了对了')
        break
    else:
        print('不对不对',i)   #不可以直接加哦
print('循环结束')

老师出的题:计算bmi

weight=float(input('输入你的体重(千克为单位)'))
height=float(input('输入你的身高(米为单位)'))
bmi=weight/(height**2)
print(bmi)

if bmi <18.5:
    print('你的bmi偏低')
elif bmi>23.9:
    print('你的bmi偏高')
else:
    print('bmi正常')

输出十行内容,每行内容都是******

a='*'
for i in range(10):
    print(a*6+'\n')

输出最小的三个水仙花数

for i in range(999):
    for x in range(9):    #不可以直接for x,y,z in range(9)哦
        for y in range(9):
            for z in range(9):
              if (x**3)+(y**3)+(z**3)==i:
                 print (x,y,z,i)
                 list=list[999]
                 list+i
x1=min(list)
print(x1)
list=list-x1
x2=min(list)
print(x2)
list=list-x2
x3=min(list)
print(x3)

球从100米落下,每次反跳一半,第n次

n=int(input('输入n的值'))
x=float(100)
for i in range(n):
    x=x/(2**i)
    print('第',n,'次跳了',x,'高')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值