代码拉取完成,页面将自动刷新
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
#读取视频文件
cap=cv.VideoCapture('bike.mp4')
#循环播放视频
while cap.isOpened():
#逐帧读取
ret,frame=cap.read()
if not ret:
print("haven't read the frame")
break
#转换为灰度图
gray=cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
#获取傅里叶系数
fCoef=np.fft.fft2(gray)
#放大傅里叶系数获得振幅谱
amp_list=20*np.log(np.abs(fCoef))
#d对振幅谱进行排序
amp_list_sorted=np.sort(amp_list.ravel())
#计算压缩0.5倍和0.05倍的阈值
thresh_1=amp_list_sorted[int((1-0.5)*gray.size)]
thresh_2=amp_list_sorted[int((1-0.05)*gray.size)]
#创建掩膜,保留振幅大于阈值的频率分量
mask1=amp_list>thresh_1
mask2=amp_list>thresh_2
#使用压缩后的傅里叶系数进行逆傅里叶变换,得到压缩后的图像
fCoef_compressed1=fCoef*mask1
fCoef_compressed2=fCoef*mask2
img_cp1=np.fft.ifft2(fCoef_compressed1).real
img_cp2=np.fft.ifft2(fCoef_compressed2).real
#将图像的值域归一化到0-255
img_cp1 = cv.normalize(img_cp1, None, 0, 255, cv.NORM_MINMAX, cv.CV_8U)
img_cp2= cv.normalize(img_cp2, None, 0, 255, cv.NORM_MINMAX, cv.CV_8U)
cv.imshow('frame',gray)
cv.imshow("img_cp_0.5",img_cp1)
cv.imshow("img_cp_0.05",img_cp2)
#每隔1ms检查一次用户输入,如果按下'q'则退出循环
if cv.waitKey(1)==ord('q'):
break
cap.release()
cv.destroyAllWindows()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。