Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Раскадровка видео через массив


Автор: ValeryV 23.2.2017, 20:13
Написал простенькую программу - захват видео через OpenCV и его воспроизведение на pictureBox1.
Пытаюсь сделать раскадровку - создаю массив и каждый кадр в цикле завожу в него. Пробую извлечь конкретный кадр из массива в pictureBox2 - изображение не получаю.Какая-то информация в элементе массива есть - pictureBox2 меняет цвет - но конкретной картинки конкретного кадра нет.Если вместо заведения кадра в массив использую SAVE в файл - кадр записывается и отображается,а через массив не хочет.Может кто подскажет в чем проблема или ошибка.Привожу код:


c++

     #pragma endregion

     array<Image^>^img;

     Bitmap^myBitmap;
     bool Pause;

     int i;
     private: System::Void button1_Click(System::Object^   sender, System::EventArgs^ e) {

     img=gcnew array<Image^>(625);// определяю как i+1[/color]


     CvCapture* capture;

     cvNamedWindow("original",CV_WINDOW_AUTOSIZE);

     capture = cvCreateFileCapture(  "  C:\\Users\\валера\\Downloads\\dance.mpg");


    while(true){

    if(Pause!=true)
 {
    // получаем следующий кадр

   frame = cvQueryFrame( capture ); 
      if( !frame ) {

   break;

                       }
     myBitmap = gcnew System:rawing::Bitmap(frame->    width,frame->height,frame->widthStep,   System:rawing::Imaging::PixelFormat::Format24bppRgb,   (System::IntPtr)frame->imageData);    
      pictureBox1->Image = myBitmap;
     img[i]= pictureBox1->Image;


    label2->Text = i.ToString(); // показываю количество    кадров 
     //if(i==3)
    //{
   // pictureBox1->Image->Save( "C:\\MyPics\\image11.bmp"    );
     //}
     i++;


    }


    char c = cvWaitKey(40);
    if (c == 27) { // если нажата ESC - выходим
    break;
   }
    }

     cvReleaseCapture( &capture );


     cvDestroyWindow("original");
     }


      private: System::Void button2_Click(System::Object^    sender, System::EventArgs^ e) {
    Pause=!Pause;
    }
       private: System::Void button3_Click(System::Object^    sender, System::EventArgs^ e) {

    pictureBox2->Image=img[3];// выбираю произвольный    индекс из массива,который хочу отобразить


      //pictureBox2->      Image=Image::FromFile("C:\\MyPics\\image11.bmp");
    }

Автор: ValeryV 24.2.2017, 19:41
Все,вопрос закрыт,разобрался. Ведь в массиве хранится не сам image,а лишь ссылка на него. Но создаваясь в цикле image нигде не сохраняется ! Т.е. я пытаюсь ссылаться на НЕСУЩЕСТВУЮШИЙ объект.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)