Преобразование стандартной строки в nsstring

0

Я разрабатываю приложение ios, используя opencv. В настоящее время, после получения изображения с камеры, я хочу отправить это изображение на сервер. Поэтому я конвертирую изображение из формата 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-вектор. Затем преобразуйте этот вектор в std-строку с именем imageString. Наконец, преобразуем эту 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] ËÿËâ53.28588327-6.21796840

С наилучшими пожеланиями

  • 0
    выглядит проблема в кодировании
  • 0
    Да, но я не знаю, почему размер резко уменьшается после преобразования из строки std в строку nsstring
Показать ещё 3 комментария
Теги:
opencv

1 ответ

1
Лучший ответ

Избегайте использования NSSting, поскольку он будет отбрасывать непечатаемые символы. Используйте NSData для отправки информации об изображении на ваш сервер.

  • 0
    Я пытался использовать NSData. Это работает, но проблема в том, что я хочу отправить их на сервер и преобразовать в JSON. Как вы можете видеть: NSDictionary * jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys: imageData, @ "imageData", широта, @ "широта", долгота, @ "долгота", ноль]; NSData * requestData = [NSJSONSerialization dataWithJSONObject: jsonDictionary параметры: ошибка kNilOptions: nil]; Я не уверен, смогу ли я преобразовать NSData в JSON как NSDictionary с ключом
  • 0
    Как упоминалось в одном из комментариев, вы можете отправлять данные изображения в Base64, так как они преобразуют их в печатную строку символов, но это не лучшее решение. Только не используйте JSON для двоичных данных - он не предназначен для этого. Предлагаю отправить данные изображения в многочастном запросе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню