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;
}