一.安装并导入 numpy, matplotlib, opencv, sounddevice, SoundFile, pydub 等 6 个模块。
1.打开命令控制符
2.输入以下命令 用清华镜像源安装numpy模块
(更新)朋友跟我说不用镜像源用pip3也能成功
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/
如上图所示就是安装好啦
同理安装其它五个模块 依次输入以下命令
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install sounddevice -i https://pypi.tuna.tsinghua.edu.cn/simple/
//下面这两个我用清华镜像源会出现http403报错,使用豆瓣、阿里云镜像源会报错could not find version satifies,因此使用了网易源
pip install SoundFile -i https://mirrors.163.com/pypi/simple/
pip install pydub -i https://mirrors.163.com/pypi/simple/
//opencv模块豆瓣源、清华源、网易源、阿里云源都报错,用官方的源都报错could not find version satifies
pip install opencv -i https://pypi.python.org/simple/
//改为安装opencv-python模块 清华源报错Http403 网易源报错time out 豆瓣源、阿里云源报错not satisfies 直接安到python文件夹下的scripts文件夹也不成功 最后挂了vpn直接
pip install opencv-python
3.导入安装好的模块们
先在命令控制符里输python
(最终导入的正确指令如下)
import numpy
import matplotlib
import cv2
import sounddevice
import soundfile
import pydub
import opencv会报错:invalid syntax
解决:改为import cv2
import SoundFile 会报错:No module named 'SoundFile'
在文件夹里看到它实际是全小写文件名 改为soundfile后就成功了
import pydub会报错:Couldn't find ffmpeg
解决:报错说需要依赖库ffmpeg 就先pip install ffmpeg 再import ffmpeg 然后import pydub
二、完成各类文件操作
1.利用 opencv 库,读取四张猫的图像(可在网上搜索 4 张图),将四张图拼成一张拼贴画,然后保存图像。
打开IDLE Shell 新建文件 并将四张猫猫的图像和文件放在同一目录下
代码如下:
import cv2
import numpy as np
# 读取四张猫的图像
cat1 = cv2.imread('cat1.jpg')
cat2 = cv2.imread('cat2.jpg')
cat3 = cv2.imread('cat3.jpg')
cat4 = cv2.imread('cat4.jpg')
# 拼接四张图 已经预先处理为同一尺寸
height, width, _ = cat1.shape
cats = np.zeros((2 * height, 2 * width, 3), dtype=np.uint8)
cats[0:height, 0:width] = cat1
cats[0:height, width:2*width] = cat2
cats[height:2*height, 0:width] = cat3
cats[height:2*height, width:2*width] = cat4
# 保存拼贴画
cv2.imwrite('cats.jpg', cats)
print("拼贴画已保存为 cats.jpg")
height, width, _ = cat1.shape:cat1.shape返回三个值(高、宽和channels)用两个变量存储了其中的高和宽
numpy.zeros((height, width, channels), np.uint8)
运行结果:![](https://i-blog.csdnimg.cn/blog_migrate/af6c38ed2c4c48cda84abf30d2102e22.png)
2.利用 sounddevice, SoundFile, pydub 库,读取一段音乐的音频文件(music.wav)并播放,依次去掉该音乐的第 2、4、6、8、10…等偶数秒内的音频,然后保存为一个新的音频文件。
同样 打开IDLE Shell 新建文件 并将音频文件和它放在同一目录下
代码如下:
import sounddevice as sd
import soundfile as sf
import ffmpeg
import pydub as py
import numpy as np
filename = 'music.wav'
data, fs = sf.read(filename, dtype="float32")
sd.play(data, fs)
status = sd.wait()
duration = len(data) / fs
for t in range(1, int(duration), 2):
start = int(t * fs)
end = int((t + 1) * fs)
data = np.concatenate((data[:start], data[end:]))
sf.write('processed_music.wav', data, fs)
这里我遇到了报错:
和配置环境的时候遇到的基本一模一样
去网上搜了一圈来挨个试 最后有效的是:下载ffmpeg 把它的bin文件夹路径添加到系统属性里的path中。
具体步骤请参考这个帖子的前三步:ffmpeg安装教程(windows版)_ffmpeg windows安装-CSDN博客ffmpeg安装教程(windows版)_ffmpeg windows安装-CSDN博客https://blog.csdn.net/m0_47449768/article/details/130102406
运行结果:
现在来看一些代码的细节:
![](https://i-blog.csdnimg.cn/blog_migrate/e5b717d05725ce03538021207b8d4815.png)
我这道题的解题思路就是:从1开始遍历到最后一秒,单数秒之间的部分删除,也就把偶数秒删除掉了。
3.读取一个文本文件(alphatwice.txt),统计该文件内英文字母(区分大小写)的出现次数,选择出现次数最高的 10 个英文字母,利用 matplotlib 库绘制“字母-次数”直方图,最后将直方图保存为一个图像文件。
同样 先创建文件并将文本文件(alphatwice.txt)和它放在一个目录下
以下是代码:
import matplotlib.pyplot as plt
# 读取文本文件
with open("alphatwice.txt", "r") as file:
text = file.read()
# 统计字母出现次数
letter_count = {}
for char in text:
if char.isalpha():
char = char.lower() # 统一转换为小写字母
if char in letter_count:
letter_count[char] += 1
else:
letter_count[char] = 1
# 选择出现次数最高的 10 个英文字母
top_letters = sorted(letter_count.items(), key=lambda x: x[1], reverse=True)[:10]
letters, counts = zip(*top_letters)
# 绘制直方图
plt.bar(letters, counts)
plt.xlabel('Letter')
plt.ylabel('Count')
plt.title('Top 10 Most Frequent Letters')
plt.savefig('letter_histogram.png') # 保存直方图为图像文件
plt.show()
运行结果:
代码的一些细节: