Перейти к содержимому
Compvision.ru

Steve_g

Пользователи
  • Количество публикаций

    9
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем Steve_g


  1. Прочитал - мое видение такое:

    struct RAWImage {
    
    	std::vector<unsigned char> data; //чисто данные картинки после декомпрессии JPEG
    
    	unsigned int width;//ширина JPEG
    
    	unsigned int height;//высота JPEG
    
    	unsigned int pixelBits;
    
    	void* sourceImage;//указатель на буфер с исходным JPEG изображением, возвращаемый live555
    
    }rawImage;
    
    
    
    cv::Mat matrixPre;
    
    cv::Mat matrixPost;
    
    unsigned short x, y, width, height;//они имеются в наличии
    
    cv::Rect rect(x,y,width,height);//прямоугольная область блоба
    
    int quality = 50;//качество 
    
    
    
    matrixPre = cv::Mat(rawImage.height, rawImage.width, CV_8UC1, &(rawImage.data[0]));//НАДО ЛИ ТУТ ИСПОЛЬЗОВАТЬ cv::IMDECODE????? если НАДО - ПОСЛЕ этой строки?
    
    
    matrixPost = matrixPre(rect).clone();//вырезание из матрицы данных полученного блоба
    
    
    //теперь, очевидно, самый сок этого кода - получение массива байт JPEG полученной матрицы ???
    
    
    std::vector<int> params;//4ый параметр функции
    
    params.push_back(CV_IMWRITE_JPEG_QUALITY);
    
    params.push_back(quality);
    
    
    vector<unsigned char> buf;//буфер под массив байт JPEG-a 3ий параметр - ВЕРНО??
    
    
    //2ой параметр - очевидно matrixPost
    
    
    //1ый параметр - ".jpg"
    
    
    cv::imencode(".jpg", matrixPost, buf, params);
    
    
    //в итоге получаю массив байт JPEG-a

    скажите пожалуйста, что не верно я в этом куске говнокода сделал? ибо я не тестировал еще, связи с сервером нет(


  2. Создал отдельную тему, поскольку название не совсем соответствует смыслу. Библиотека live555 отрабатывает так, что возвращает с камеры jpeg изображение в виде массива байт (unsigned char*). Далее с помощью библиотеки LibJPEG мы раскладываем этот массив на чисто данные unsigned char* data, ширину и высоту - unsigned int width и unsigned int height.

    Эти данные мы подаем на вход распознавателя, который ищет некие объекты на изображении. В случае, если они найдены - сохраняет полученное с камеры изображения в векторе. Далее эти изображения анализируются библиотекой cvblobs - вроде дополнение к OpenCV и по последовательно подаваемым фоткам получает блобы - соответствующие контурам двигающихся оъектов. Координаты объектов соответственно мы теперь тоже знаем.

    Итак - на выходе. Исходное изображение, координаты областей с объектами!

    Теперь предположим, нам нужна ЭЦП на картинку и данные. Как подписать данные - я знаю и сделал. а вот с картинкой не так все просто. Вернее было просто, когда была целая картинка - я подавал на вход функции массив байт (unsigned char* pictureData). Теперь же надо подписывать лишь вот эти куски большой картинки, которые содержат объекты.

    Описал проблему - теперь вопрос -

    надо как то вырезать из unsigned char* pictureData (jpeg картинка в виде байт-массива) вырезать cvRect (x,y,width,height) где x,y,width & height - величины относительно большой картинки. И привести к опять же виду массива байт - unsigned char*.

    Знаю, что ресурсы OpenCV и прилагающихся библиотек практически неисчерпаемы, соответственно я ОЧЕНЬ МНОГО каких функций не знаю - если ЕСТЬ - ПОДСКАЖИТЕ ПОЖАААЛУЙСТА!

    Заранее премного благодарен!!


  3. AuST - можно, куча специальных функций

    Nuzhny - я видимо второпях не посмотрел на число ответов на форуме stаckoverflow - 2летней давности... наверное раз на сайте официальном OpenCV есть - то документировали стало быть...Но в любом случае мы отказались от использования OpenCV...С камерой работаем при помощи библиотеки Live555...из основного приложения тоже наверное выкинем OpenCV, ажаль..я старался разбираться..ну ничего, поможет в будущем))


  4. Существует проблема, связанная с эксплуатацией жесткого диска. На текущий момент в нашем проекте, фотографии с камеры сохраняются в ФС на винте. далее распознаватель обращается к ФС при помощи функции OPenCV cvLoadImage.

    Необходимо сделать так, чтобы работа с ФС была полностью исключена, поскольку винт итак эксплуатируется очень сильно! Основная программа работает с библиотекой live555 по работе с камерой, которая собственно и сохраняет картинки в файлы. Есть какая нибудь замена сvLoadImage, которая обращается к файлу, чтобы загружать картинку из памяти? ну или что то в этом роде)

    Буду рад любой идее..если что либо непонятно, или написал не собвсем доступно, прошу извинить, в любой момент готов объяснить!

    Помогите, чем можете) спасибо!


  5. это фотографии, поэтому лучше jpeg, я тоже кстати вначале думал, почему бы png не использовать)

    последовательностью кадров не является, именно что фотографии..и их размер надо уменьшить...перевод в ч\б и размытие ненужных частей пока принято на вооружение.. больше пока ничего нет, а завтра уже надо пробовать!! Помогите кто чем может, еще ))


  6. Выскажите, пожалуйста, кто что знает по следующему поводу - с камеры поступает изображение, которое надо сохранить в jpeg, но наименьшего объема...качество д.б. таким , чтобы на изображении можно было распознавать информацию, номера авто и т.д. Какие есть советы по оптимизации? Я вот знаю, что вроде при переводе в ч\б размер уменьшается..а как еще?

    Спасибо всем высказавшемся!

×