多媒体技术第二次实验--简单的Python多媒体

本文详细描述了如何在Python中安装numpy,matplotlib,opencv,sounddevice,SoundFile,pydub等常用库,并展示了如何使用这些库进行图像拼接、音频剪辑和文本分析,包括绘制字母频率直方图。
摘要由CSDN通过智能技术生成

一.安装并导入 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)

            运行结果:
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博客icon-default.png?t=N7T8https://blog.csdn.net/m0_47449768/article/details/130102406

       运行结果:

                        ​​​​​​​        

        现在来看一些代码的细节:

        

         我这道题的解题思路就是:从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()
        运行结果:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        代码的一些细节:

        

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值