Mat ,string,char数组之间转换

本文详细介绍了char数组与string、Mat之间的相互转换方法,并针对图片数据的特殊处理提供了有效的解决方案,包括base64编码的必要性和正确使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. char数组与 string之间的转换
    //字符数组转化成string类型
    char ch [] = “ABCDEFG”;
    string str(ch);//也可string str = ch;

    //将string类型转换为字符数组
    char buf[10];
    string str(“ABCDEFG”);
    strcpy_s(buf, str.c_str());

  2. string 转Mat
    std::vector vec_data(image_string.c_str(), image_string.c_str() +image_string.size());
    cv::Mat dst2 = cv::imdecode(vec_data, CV_LOAD_IMAGE_UNCHANGED);

  3. char数组转Mat
    //char先转string,string再转Mat
    char modelImage[MAX_MODEL_IMAGE_SIZE];
    int modelImageSize = MAX_MODEL_IMAGE_SIZE;

    string str2(modelImage, modelImageSize);
    std::vector vec_data1(str2.c_str(), str2.c_str() + str2.size());
    cv::Mat dst21= cv::imdecode(vec_data1, CV_LOAD_IMAGE_UNCHANGED);

  4. Mat 转string
    std::vector buff;
    cv::imencode(".bmp", load_image, buff);
    std::string image_string(reinterpret_cast<char*>(&buff[0]), buff.size());

  5. Mat 转char数组
    char modelImage[MAX_MODEL_IMAGE_SIZE]; //char数组
    int modelImageSize ;//数组大小
    std::vector buff;

    cv::imencode(".bmp", load_image, buff);
    memset(modelImage, 0, MAX_MODEL_IMAGE_SIZE);
    memcpy(modelImage, reinterpret_cast<char*>(&buff[0]), buff.size());
    modelImageSize = buff.size();

以上转自:https://blog.youkuaiyun.com/weixin_42112458/article/details/83117305

当char数组中存储的数据是图片数据时,用上面的“char数组转string”,再从“string转Mat”后,用imshow显示图片时发生崩溃。
解决方法:
char *modelImage;//图片数据
int length;//数据长度

std::vector vec_data;
vec_data.insert(vec_data.end(), modelImage, modelImage + length);
cv::Mat dst = cv::imdecode(vec_data, CV_LOAD_IMAGE_UNCHANGED);

imshow(“dst”, dst);

另:图片字节数组为什么必须进行base64编码后才能传输呢?
http协议可以传输二进制数据(浏览器里面的图片、视频、音频都是二进制数据),问题是传输的时候必须保证字节不会改变。你直接将图片的字节转化为一个字符串一般是不行的,除非使用的字符集在0~255之间全部有对应的字符,否则就会导致某些字节转换错误,那么客户端所收到的就不再是原来的那些字节了。
base64之所以可以,是因为编码之后的字符都落在ASCII区间,而ASCII是所有字符编码都会支持的,因此可以正确传输和还原。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值