ValeryV

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

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

  • Посещение

Репутация

0 Новичек

О ValeryV

  • Звание
    Бывалый
  1. Решил проблему скорости.Возможно примитивно,но решение работает. Понимая,что не могу (или еще не умею) увеличить продолжительность воспроизведения каждого frame я решил просто увеличить количество одинаковых frame в каждом цикле.Т.е. в основном цикле создаю внутрений while в котором повторяется одна команда - cvWriteFrame(writer, frame); Количество итераций этого цикла и изменяет скорость записи-воспроизведения
  2. Вопрос закрытия приложения решил.Осталась одна проблема,которую решить не получается самому.Почему-то записанное видео имеет скорость значительно выше оригинала. Пробовал менять параметр cvWaitKey, пробовал менять fps - ничего не помогает.
  3. У меня не камера ( с камерой у меня было все просто и даже ОТЛИЧНО ).Там захват делал opencv ,а мне оставалось лишь или записать или отправить на форму в picturebox,что тоже не являлось проблемой ). Здесь у меня захват экрана ,передача в opencv и там запись.Но захват экрана происходит в цикле,который теперь (кстати,благодаря Вашей помощи) прерывается по команде. А форма не закрывается и что-то там себе отрабатывает,что хорошо слышно по звуку винта
  4. Запустил цикл в компоненте BackgroundWorker.Теперь цикл прерывается . Однако закрыть Form не получается, причем не зависает ( в диспетчере задач "Работает",а не "Не отвечает" ).Может мусор за циклом убирается долго ? Или какая может быть причина ?
  5. Сомневаюсь.что сам убирает, пока frame=nullptr не прописал память переполнялась.К тому же ,не зря ведь функцию cvReleaseImage для освобождения ресурсов в библиотеку добавили
  6. Спасибо,обязательно посмотрю. И еще один вопрос - у меня первоначально перегружалась память. Я решил в конце каждого цикла ее освобождать через cvReleaseImage. Но получаю ошибку - cvReleaseImage: невозможно преобразовать параметр 1 из "cli::interior_ptr<Type>" в "IplImage **"Ту я не могу понять в чем дело. ведь frame объявлен как IplImage*frame Когда я вместо этого написал frame = nullptr - ошибка исчезла.Если можете,объясните,в чем проблема ?
  7. Вы имеете в виду this->Close() ? Я не знаю ,что не работает с формами. Дело в том ,что в моих предыдущих проектах я цикл спокойно разрывал (правда не через break, а через button1Click while(N==k) { ...пошел цикл..) button2_Click { N !=k} Но сейчас этот метод не работает. Но ведь раньше с opencv на форме работал! Правда,сам цикл был проще
  8. вопрос решил - Format32bppRgb поменял на Format24bppRgb и число каналов в cvCreateImage c 4 на 3 Есть новая проблема - вставил в цикл для разрыва цикла сhar c; if(c==27) { break;} Не работает. Программа перестает отвечать через пару секунд после нажатия Button. При этом запись успешно продолжается, а остановить получается лишь через Диспетчер устройств
  9. Помогите разобраться почему не работает программа для записи видео с экрана.Программа компилируется,но при запуске выскакивает исключение System.Runtime.InteropServices.SEHException" в приложении ЗАГОТОВКА_OpenCV_WF.exe Дополнительные сведения: Внешний компонент создал исключение. В стеке вызовов: "указанные ниже фреймы могут быть неверны и(или) отсутствовать,символы для opencv_core220d.dll не загружены" Проверяю frame - через cvShowImage( "original", frame ) - все в порядке.А записываться он не хочет. Вот код private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { const char *filename = "C:\\Users\\валера\\Pictures\\Video.avi"; Graphics^ graph; Bitmap^ bitmap; //cvNamedWindow("original",CV_WINDOW_AUTOSIZE); bitmap = gcnew Bitmap (Screen::PrimaryScreen->Bounds.Width,Screen::PrimaryScreen->Bounds.Height); CvSize size = cvSize(Screen::PrimaryScreen->Bounds.Width, Screen::PrimaryScreen->Bounds.Height); CvVideoWriter *writer = cvCreateVideoWriter(filename, CV_FOURCC('D','I','V','X'), 25, size, 1); assert(writer!=0); while(true){ graph = Graphics::FromImage(bitmap); graph->CopyFromScreen(0,0,0,0,bitmap->Size); System::Drawing::Rectangle Rect(0,0,bitmap->Width,bitmap->Height); Bitmap ^ bitmap1 = bitmap->Clone(Rect, Imaging::PixelFormat::Format32bppRgb); System::Drawing::Imaging::BitmapData^ bmData = bitmap->LockBits( System::Drawing::Rectangle(0, 0, bitmap1->Width, bitmap1->Height) , System::Drawing::Imaging::ImageLockMode::ReadWrite,bitmap1-> PixelFormat); frame = cvCreateImage(cvSize(bitmap1->Width , bitmap1->Height) , IPL_DEPTH_8U , 4); frame->imageData = (char*)bmData->Scan0.ToPointer(); cvNamedWindow("original",CV_WINDOW_AUTOSIZE); cvWriteFrame(writer, frame); // cvShowImage( "original", frame ); cvWaitKey(5); bitmap->UnlockBits(bmData); } cvReleaseCapture( &capture ); cvReleaseVideoWriter(&writer); // cvDestroyWindow("capture"); } Я в opencv (да и вообще в программировании) новичок, так что не очень критикуйте за допущенные ошибки
  10. К сожалению в указанной ветке есть только обратная конвертация - IplImage в bitmap
  11. Как преобразовать Bitmap (System::Drawing::Image) в IplImage*frame (openCV)?