将std字符串转换为nsstring

时间:2014-08-27 14:14:19

标签: c++ ios objective-c opencv

我正在使用opencv开发一个ios应用程序。目前,我从相机获取图像后,我想将此图像发送到后端服务器。所以我将图像从Mat格式转换为NSString。

如下所示:

    //Convert image from mat format to vector unchar
    cv::vector<uchar> buff;//buffer for coding
    cv::vector<int> param = cv::vector<int>(2);
    param[0]=CV_IMWRITE_JPEG_QUALITY;
    param[1]=95;//default(95) 0-100
    cv::imencode(".jpg",image,buff,param);

    //Convert from vector unchar to string
    std::string imageString(buff.begin(), buff.end());
    NSLog(@"%lu",imageString.size());

    //Convert from string to NSString
    imageData = [NSString stringWithCString:imageString.c_str() encoding:[NSString defaultCStringEncoding]];
    NSLog(@"%@",imageData);
    NSLog(@"%lu",(unsigned long)imageData.length);

首先,我将图像从mat转换为unchar矢量。然后将此向量转换为名为imageString的std字符串。最后,将此std字符串转换为NSString imageData。

然而,imageString的大小是80804,我认为应该是正确的。但是imageData的大小是4.我不知道这里发生了什么。

  • 2014-08-27 15:09:04.094 FaceDetection [14540:60b] 80804
  • 2014-08-27 15:09:04.095 FaceDetection [14540:60b]ÿ‡
  • 2014-08-27 15:09:04.097 FaceDetection [14540:60b] 4
  • 2014-08-27 15:09:05.438 FaceDetection [14540:60b]

以下是代码:

NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:imageData, @"imageData", latitude, @"latitude", longitude, @"longitude", nil];

来自服务器的回复:

2014-08-27 15:09:05.438 FaceDetection [14540:60b]ËÿËâ.52.28588327-6.21796840

祝你好运

1 个答案:

答案 0 :(得分:1)

避免使用NSSting,因为它会丢弃不可打印的字符。使用NSData将图像信息发送到您的服务器。