加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
fft2视频压缩.py 1.53 KB
一键复制 编辑 原始数据 按行查看 历史
fs 提交于 2023-06-14 15:25 . first commit
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()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化