#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>#include "opencv2/opencv.hpp"using namespace std;
using namespace cv;// opencv 内存方式将rgb数据,压缩成jpeg数据
int rgb_to_jpg_memory(cv::Mat rgb, char *out_buf, int out_buf_max_len, int *out_buf_len)
{if(!out_buf || out_buf_max_len <= 0 || !out_buf_len)return -1;std::vector<uchar>         data_encode;vector<int>           param = vector<int>(2);// 设置压缩数据的格式,以及压缩的质量param[0]=CV_IMWRITE_JPEG_QUALITY;param[1]=60;//default(95) 0-100// 将rgb数据压缩成jpg数据bool err = cv::imencode(".jpg", rgb, data_encode, param);if(!err)return -2;if(out_buf_max_len < data_encode.size())return -3;// 将压缩的jpg数据,放到输出buf中std::copy(data_encode.begin(), data_encode.end(), out_buf);*out_buf_len = data_encode.size();return 0;
}int rgb_to_jpg(char *pRgb, int width, int height, char *pJpeg, int in_jpeg_len, int *out_jpeg_len)
{if(!pRgb || width <= 0 || height <= 0|| !pJpeg || in_jpeg_len <= 0 || !out_jpeg_len)return -1;cv::Mat          frame;int               ret = -1;frame.create(height, width, CV_8UC3);memcpy(frame.data, pRgb, width*height*3);// 缩放//cv::resize(frame, frame, cv::Size(resize_width, resize_height), (0, 0), (0, 0), cv::INTER_LINEAR);// 将rgb数据转换为jpeg数据ret = rgb_to_jpg_memory(frame, pJpeg, in_jpeg_len, out_jpeg_len);if(ret < 0){printf("err = %d\n", ret);frame.release();return -2;}else{//if(*out_jpeg_buff_len > 0)//  write_file(pJpegBuff, *out_jpeg_buff_len);}frame.release();return 0;
}

主要使用的是,OpenCV图像编码和解码 imencode和imdecode

参考网址:

https://blog.csdn.net/nn1997729/article/details/111936505

OpenCV内存方式,将rgb数据压缩成jpg数据相关推荐

  1. openCV内存释放问题

    转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7586847 前一天把系统整个重写了一遍,脉络清晰了很多,也终于解决了以前很多崩溃, ...

  2. 以通信方式共享内存,不要以共享内存方式通信(2)

    继续以"以通信方式共享内存,不要以共享内存方式通信"这句话展开. 从云原生开始. 云原生是面向微服务的架构,而消息传递是微服务交互的媒介,每个工人都接触过关于消息队列的概念,正是消 ...

  3. 【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )

    文章目录 一.Linux 系统 动态分配堆内存 方式 二.brk 系统调用 动态分配堆内存 一.Linux 系统 动态分配堆内存 方式 Linux 系统中 , 提供了 222 种方式 进行 " ...

  4. 【学习 OpenCV】—— 色彩空间(RGB、HSV、rgb2hsv、rgb2gray 的实现)

    RGB 色彩空间的基础是对叠加型三原色(红绿蓝)的应用.之所以选择它们,是因为把它们组合起来后可以产生色域很宽(256*256*256)的各种颜色.实际上,人类的视觉系统( Human visual ...

  5. 官方指定Jmeter配置JVM堆内存方式

    官方指定Jmeter配置JVM堆内存方式 文章目录 官方指定Jmeter配置JVM堆内存方式 1.概述 2.调整Jmeter堆内存 2.1.介绍官方推荐堆内存调整方法(jmeter在windows环境 ...

  6. win7下使用共享内存方式CreateFileMapping失败错误码5的解决方法

    在普通应用程序中使用共享内存方式创建内存共享对象时,CreateFileMapping函数总是返回句柄为NULL,通过GetLastError得到返回错误码 0x5, 问题解决: 使用Local 代替 ...

  7. hyperv动态内存Linux,Linux 之动态分配内存方式

    (1)malloc/free 函数 malloc()函数和free()函数是在堆中申请或释放内存空间的,其函数声明如下: #include extern void* malloc(size_t _si ...

  8. opencv、matplotlib、pillow和pytorch读取数据的通道顺序

    文章目录: 1 opencv读取数据的通道顺序 1.1 opencv读取数据相关说明 1.2 显示opencv读取的数据 1.3 把opencv读取的BGR转换RGB的三种方式 2 matplotli ...

  9. 深入理解数据压缩与重复数据删除

    原文地址:http://blog.csdn.net/liuaigui/article/details/6324133 [导读] 数据压缩与重复数据删除两种技术有何区别与联系呢?实际中又该如何正确应用呢 ...

最新文章

  1. 4G EPS 中建立 UE 和 MME 之间的 NAS(非接入服务)信令连接
  2. 济南python工资一般多少钱-济南python编程培训班价格
  3. access建立两个字段唯一索引_关于MongoDB唯一索引(Unique)的那些事
  4. 【英语学习】【WOTD】scrumptious 释义/词源/示例
  5. 【leetcode】726. Number of Atoms
  6. Windows Server 2008R2配置ISCS存储
  7. mysql在windows配置多节点_Windows环境配置MySQL集群
  8. 协方差矩阵的计算方法
  9. 动词变名词的变化规则_高中英语动词变名词的变化规则
  10. 深圳哈工大计算机系的课表,学在哈深|哈工大(深圳)学子课表大比拼,今天你满课了吗?...
  11. 【20220318】执行脚本提示killed
  12. QQ群关于C#和php的讨论
  13. MAC vscode 编译多个文件失败(已解决)
  14. php 除法,php中如何除法取整
  15. casewhen多条件查询_Mybatis(三)- MyBatis 多条件查询和模糊查询实例
  16. 简单实用的ajax脚本
  17. 弹钢琴flash游戏
  18. Java学习_Day 03(学习内容:狂神说JAVA零基础P17-P29)
  19. [USACO Oct08] 挖水井题解
  20. 关于征订2009年“注册电气工程师执业资格考试(供配电专业)

热门文章

  1. Another app is currently holding the yum lock解决方法
  2. c++生成随机数详解(包含可执行代码)
  3. VS2015 更换序列号
  4. Python:实现Julia集算法(附完整源码)
  5. 韩国驾驶照换中国驾驶照
  6. IP地址(配置),MAC地址,DNS,电脑无法上网解决解决步骤
  7. 干货课堂丨分享一种LCD驱动电路方案【飞凌嵌入式】
  8. 使用Retrofit的过程中遇到 type xxx.xxx.xxxdoes not have type parameters
  9. 恭贺新春-杨建荣敬祝
  10. 苹果cms怎么更换模板logo详细教程