2014-08-27 126 views
0

我正在使用opencv开发一个ios应用程序。目前,在我从相机获取图像后,我想将此图像发送到后端服务器。所以我将Mat格式的图像转换为NSString。将std字符串转换为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); 

首先,我转换图像从垫到unchar载体。然后将此矢量转换为名为imageString的std字符串。最后,将这个std字符串转换为NSString imageData。

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

  • 2014年8月27日15:09:04.094人脸检测[14540:60B] 80804
  • 2014年8月27日15:09:04.095人脸检测[14540:60B]ÿ‡
  • 2014-08 -27 15:09:04.097人脸检测[14540:60B] 4
  • 2014年8月27日15:09:05.438人脸检测[14540:60B]

下面是代码:

NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:imageData, @"imageData", latitude, @"latitude", longitude, @"longitude", nil]; 
从服务器210

和响应:

2014年8月27日15:09:05.438人脸检测[14540:60B]使用NSSting因为它ËÿËâ¡53.28588327-6.21796840

此致

+0

看起来像编码问题 – Iducool 2014-08-27 14:20:15

+0

是的,但我不知道为什么尺寸从std字符串转换为nsstring后急剧下降 – Xiang 2014-08-27 14:23:15

+0

如果您想将它发送到服务器,那么Base64是最可取的。 – Iducool 2014-08-28 05:33:21

回答

1

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

+0

我尝试使用NSData的。它的工作原理,但问题是我想将它们发送到服务器,我想将其转换为JSON。如你所见:NSDictionary * jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:imageData,@“imageData”,latitude,@“latitude”,longitude,@“longitude”,nil]; NSData * requestData = [NSJSONSerialization dataWithJSONObject:jsonDictionary options:kNilOptions error:nil];我不知道如果我能的NSData转换成JSON像NSDictionary中有一个关键 – Xiang 2014-08-28 12:41:23

+0

正如你可以为Base64发送图像数据的意见,一个被提及,因为这将其转换为可打印字符串,但它不是最好的解决办法。只是不要使用JSON来处理二进制数据 - 它不适用于它。我建议在多部分请求中发送图像数据。 – 2014-08-31 08:28:44