json格式存储b64编码的rgb raw数据

本文介绍了如何使用Python的OpenCV库从jpg图像中提取RGB原始数据,然后使用cJSON和base64库进行编码和解码的过程。
摘要由CSDN通过智能技术生成

1.rgb raw数据准备

利用python将jpg里面的rgb raw数据提取出来。

import cv2

# 读取 JPG 图像
image_path = '1.jpg'
image = cv2.imread(image_path)#imread读出来的顺序是BGR
print("image shape:",image.shape)

# 将图像由BGR转换为 RGB 数据
rgb_data = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# cv2.imwrite() function is used to save the RGB data to a file. 
# The output_path variable specifies the path and filename for the output file, which should have a JPG extension
#output_path = 'output'
#cv2.imwrite(output_path,rgb_data)
# 将RGB存为RAW数据
output_path = 'rgb.raw'
rgb_data.tofile(output_path)

1.1 查看raw数据

在这里插入图片描述

2.代码实现

在这里插入图片描述

2.1 cjson库:https://github.com/DaveGamble/cJSON

2.2 base64库:https://github.com/jwerle/b64.c

2.3 工程目录

在这里插入图片描述

#include <stdio.h>
#include "cjson/cJSON.h"
#include "b64.c-0.1.0/b64.c-0.1.0/b64.h"
#include <stdlib.h>
int main()
{
	cJSON* json_test = cJSON_CreateObject();
	cJSON_AddNumberToObject(json_test, "emiss", 95);
	cJSON* json_point1 = cJSON_CreateObject();
	cJSON_AddNumberToObject(json_point1, "x", 0);
	cJSON_AddNumberToObject(json_point1, "y", 0);
	cJSON* json_point2 = cJSON_CreateObject();
	cJSON_AddNumberToObject(json_point2, "x", 0);
	cJSON_AddNumberToObject(json_point2, "y", 0);
	cJSON* json_points = cJSON_CreateArray();
	cJSON_AddItemToArray(json_points, json_point1);
	cJSON_AddItemToArray(json_points, json_point2);
	cJSON* json_point = cJSON_CreateObject();
	cJSON_AddItemToObject(json_test, "point", json_points);
	FILE* fp = fopen("rgb.raw", "rb+");
	char* buf = NULL;
	int len = 0;
	if (fp) {
		fseek(fp, 0, SEEK_END);
		len = ftell(fp);
		buf = (char*)malloc(len);
		fseek(fp, 0, SEEK_SET);
		fread(buf, 1, len, fp);
	}
	//编码
	char* enc = b64_encode(buf, len);
	//printf("enc:%s\n", enc);
	cJSON_AddStringToObject(json_test, "y16data", enc);
	cJSON* testy16 = cJSON_GetObjectItem(json_test, "y16data");
	char* buf1 = testy16->valuestring;
	char* dec = b64_decode(buf1, strlen(buf1));
	//printf("dec:%s\n", dec);
	FILE* fp1 = fopen("rgb_result.raw", "wb+");
	if (fp1) {
		fwrite(dec, 1, len, fp1);
		fclose(fp1);
	}
	char* str = cJSON_Print(json_test);
	printf("str:%s,len:%d\n", str,strlen(str));
	cJSON_Delete(json_test);
	fclose(fp);
	free(buf);
	return 0;
}


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex1_Code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值