厦门大学计算机网络小组第一周技术记录

一.  项目进展:

1.下载并安装ffmpeg,学习ffmpeg命令行编码解码的命令行语句

2.下载安装OpenCV并配置到Visual Studio,学习cv空间下的库函数imshow()、imwrite()、Mat image()等

3.编写随机生成二进制图像文件以及读取二进制文件生成图片文件的c++代码

4.学习物理层传输的原理,巩固传输过程中的编解码、噪声、分辨率、波特率、调制和误码等通信概念

二.  下一步计划:

1.编程计算各种传输物理量的cpp程序

2.利用奈氏定理以及香农定理优化传输速率

三.  技术尝试:

尝试使用python语言的tkinter框架编写图形用户界面以及输入输出程序,但因为不是项目侧重点以及有的组员没学过Pyhton,就还是采用Cpp嵌入OpenCV到Visual Studio里来执行程序。

以下是已有的一些cpp代码:

随机生成二进制文件的代码参考网络,并不太好,文件量极大......

//以下是随机生成仅带颜色图像文件的代码
#include <opencv2/opencv.hpp>
#include <fstream>

using namespace cv;
using namespace std;

int main() {
    // 设置图像参数
    int width = 640;
    int height = 480;
    int numImages = 20; // 生成的图像数量

    // 创建二进制文件并写入图像数据
    ofstream binaryFile("images.bin", ios::binary); //images.bin为生成的二进制文件,文件路径和cpp程序同目录
    for (int i = 0; i < numImages; ++i) {
        Mat image(height, width, CV_8UC3);
        randu(image, Scalar(0, 0, 0), Scalar(255, 255, 255)); // 随机生成颜色图像

        // 写入图像数据到二进制文件
        binaryFile.write(reinterpret_cast<char*>(image.data), image.total() * image.elemSize());
    }
    binaryFile.close();

    // 从二进制文件读取图像数据并显示,此段代码可不需要显示在屏幕上
    ifstream readBinaryFile("images.bin", ios::binary);
    for (int i = 0; i < numImages; ++i) {
        Mat image(height, width, CV_8UC3);
        readBinaryFile.read(reinterpret_cast<char*>(image.data), image.total() * image.elemSize());

        // 显示图像
        imshow("Image", image);
        waitKey(1000); // 每秒显示一个图像
    }
    readBinaryFile.close();

    return 0;
}
#include <opencv2/opencv.hpp>
#include <fstream>

int main() {
    // 设置图像参数
    int width = 640;
    int height = 480;
    int numImages = 20; //生成图片个数,与二进制文件对应

    // 从二进制文件读取图像数据并保存为文件
    std::ifstream readBinaryFile("images.bin", std::ios::binary); //images.bin需要放在程序同目录下
    for (int i = 1; i < numImages+1; ++i) {
        // 读取图像数据
        cv::Mat image(height, width, CV_8UC3);
        readBinaryFile.read(reinterpret_cast<char*>(image.data), image.total() * image.elemSize());

        // 生成图像文件名,例如 image_0.jpg、image_1.jpg 等
        std::string filename = "image" + std::to_string(i) + ".jpg";  //生成图片的文件名

        // 保存图像为文件
        cv::imwrite(filename, image);

        // 显示图像(可选)
        cv::imshow("Image", image);
        cv::waitKey(1000); // 每秒显示一个图像
    }
    readBinaryFile.close();

    return 0;
}

END.   记录ffmpeg命令行解释供队员参考:

ffmpeg -framerate 1 -i image%01d.jpg -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p -vframes 20 output.mp4

-framerate 1: 指定视频的帧率为1帧每秒。这意味着你的输出视频将以每秒一个图像的速度播放。
-i image%01d.jpg: 这是输入图片的文件名模板。%01d 表示使用四位数字作为文件名的一部分,例如,image1.jpg, image2.jpg 等。
-c:v libx264: 指定使用H.264视频编码器进行视频压缩。
-profile:v high: 设置视频编码的配置文件为高级别。H.264的不同配置文件提供了不同的性能和兼容性。
-crf 20: 指定视频的恒定质量(Constant Rate Factor),数值越低,视频质量越高,范围一般在18-28之间。
-pix_fmt yuv420p: 设置像素格式为yuv420p,这是常用的像素格式,特别是在网络上分享视频时。
-vframes 20: 指定输出视频的帧数,这里设置为20帧。
output.mp4: 指定输出文件的名称,这是生成的视频的文件名

ffmpeg -i input.mp4 -q:v 2 output%01d.jpg
    -i input.mp4: 指定输入视频文件为 input.mp4,你可以替换为你的视频文件路径和名称。
    -q:v 2: 设置图像的质量,数值越小,图像质量越高。这里设定为2,可以根据需要调整。
    output%01d.jpg: 指定输出图像文件的命名规则,其中 %01d 表示一位数字,例如,output1.jpg、output2.jpg 等。

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值