实现频率域滤波(理想,布特沃斯,高通
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,'高')