上层-原始图像 下层:编码+解码后的lossy_img
#include // 包含OpenCV核心功能的头文件
#include // 包含OpenCV图像处理功能的头文件
#include // 包含OpenCV图像编码解码功能的头文件
#include // 包含标准输入输出流的头文件
#include // 包含标准模板库中的向量容器的头文件
using namespace std; // 使用标准命名空间
using namespace cv; // 使用OpenCV命名空间
int 服务器托管main(int /*argc*/, const char** /*argv*/) // 主函数入口
{
Mat framebuffer(160 * 2, 160 * 5, CV_8UC3, cv::Scalar::all(255)); // 创建一个320x800的8位3通道图像,初始为全白
Mat img(160, 160, CV_8UC3, cv::Scalar::all(255)); // 创建一个160x160的8位3通道图像,初始为全白
// 创建测试图像
{
const Point center(img.rows / 2, img.cols / 2); // 计算图像中心点
for (int radius = 5; radius param;
param.push_back(IMWRITE_JPEG_SAMPLING_FACTOR); // 指定压缩参数
param.push_back(config[i].sampling_factor);
vector jpeg;
(void)imencode(".jpg", img, jpeg, param); // 将图像编码为JPEG格式
// 解压缩图像
Mat jpegMat(jpeg);
Mat lossy_img = imdecode(jpegMat, -1); // 将JPEG数据解码回图像格式
// 复制到帧缓冲并评论
Mat roi = framebuffer(Rect(left, top, lossy_img.rows, lossy_img.cols)); // 定义感兴趣的区域
lossy_img.copyTo(roi); // 将损失压缩的图像复制到帧缓冲
cv::putText(roi, config[i].comment, Point(5, 155), FONT_HERSHEY_SIMPLEX, 0.5, Scalar::all(0), 2, 4, false); // 在图像上标记采样因子
left += lossy_img.rows; // 移动到下一个位置
}
}
// 输出帧缓冲(无损压缩)
imwrite("imgcodecs_jpeg_samplingfactor_result.png", framebuffer); // 将帧缓冲保存为PNG文件
return 0; // 程序正常退出
}
该段代码主要演示了如何使用OpenCV库来创建和处理图像,并保存为不同JPEG采样因子的版本。它首先创建了一个原始的白色图像,并在其上绘制了紫色圆形及黑色边框。然后,代码使用不同的JPEG采样因子参数对图像进行了压缩,并将压缩后的图像保存到一个大的帧缓冲中,这个帧缓冲最终会展示所有原始图像和不同采样模式下的压缩图像。最后,帧缓冲被保存为一个PNG文件。此代码用于测试和展示JPEG图像压缩效果的差异。
服务器托管,北京服务器托管,服务器租用 http://www服务器托管.fwqtg.net
相关推荐: zookeeper中的znode节点的一些功能和应用
zookeeper是一个挺好玩的东西 有着独特的选举机制,一般在中小型集群中,zookeeper一般装在三个节点 其中只有一个节点对外提供服务,处于leader状态,另外两台未follower状态 这得益于zookeeper独特的选举机制,可以保证leader…