Получить frame (Opencv) и записать в bmp (cimg)

bdm77
Дата: 29.06.2015 11:23:11
Добрый день!

Я использую opencv (2.3.1) получаю stream из IP камеры.
Мне нужно полученный frame записать в bmp файл, используя библиотеку Cimg.

Есть код:
    Mat frame;
    VideoCapture cam("rtsp://admin:admin@192.168.2.228/defaultPrimary?streamType=u");
    while(true)
    {   
        if (!cam.read(frame))
            continue;

        count++;
        cimg_library::CImg<unsigned char>* m_frameData = new cimg_library::CImg<unsigned char>(1920, 1080, 1 , 3);

        if (frame.data)
        {
            cvtColor(frame, frameRGB, CV_BGR2RGB);
            uchar* pixelsRGB = frameRGB.data;

            for (unsigned int x = 0; x < frame.rows; x++)               
            {
                for (unsigned int y = 0; y < frame.cols; y++)   
                {                       
                    m_frameData->atXYZC(x,y,0,0) = (int) pixelsRGB[ y + x];
                    m_frameData->atXYZC(x,y,0,1) = (int)pixelsRGB [ y + x + 1];
                    m_frameData->atXYZC(x,y,0,2) = (int) pixelsRGB[ y + x + 2];
                }
            }

            std::string fileWrite = "C:\\Temp\\out" +count+ ".bmp";             
            m_frameData->save_bmp(fileWrite.c_str());

            delete m_frameData;
     }


В приложенном файле первая картинка что я получаю, вторая что должно быть.
М.б. кто то сталкивался ?

Заранее спасибо!
YesSql
Дата: 29.06.2015 13:21:58
bdm77,

Какой кодек выбран?
bdm77
Дата: 29.06.2015 13:48:21
YesSql,

Opencv использует ffmpeg..
YesSql
Дата: 29.06.2015 14:31:11
bdm77
YesSql,

Opencv использует ffmpeg..

в этой комбинации какие-то проблемы были с H.264
bdm77
Дата: 29.06.2015 14:44:54
YesSql, были в OPENCV (2.3.1), но решил.

Видео он получает замечтальное.
Но вот где то проблема с математикой.

Нашел полурешение.


.............
int step = *frameRGB.step.p; // 5760
 
          for (unsigned int x = 0; x < frameRGB.cols; x++)               
          {
                for (unsigned int y = 0; y < frameRGB.rows; y++)   
                {                       
                    m_frameData->atXYZC(x,y,0,0) = (int) pixelsRGB[step * y + x]; // увеличил на step
                    m_frameData->atXYZC(x,y,0,1) = (int)pixelsRGB [step * y + x + 1];
                    m_frameData->atXYZC(x,y,0,2) = (int) pixelsRGB[step * y + x + 2];
                }
            }

            std::string fileWrite = "C:\\Temp\\out" +count+ ".bmp";             
            m_frameData->save_bmp(fileWrite.c_str());

            delete m_frameData;


Получил вот такую картинку:
bdm77
Дата: 29.06.2015 14:48:51
Картинка чб и не весь фрейм, а только часть его!!