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

ValeryV

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

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

  • Посещение

Все публикации пользователя ValeryV

  1. Помогите разобраться почему не работает программа для записи видео с экрана.Программа компилируется,но при запуске выскакивает исключение 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 (да и вообще в программировании) новичок, так что не очень критикуйте за допущенные ошибки
  2. Не работает функция cvWriteFrame

    Решил проблему скорости.Возможно примитивно,но решение работает. Понимая,что не могу (или еще не умею) увеличить продолжительность воспроизведения каждого frame я решил просто увеличить количество одинаковых frame в каждом цикле.Т.е. в основном цикле создаю внутрений while в котором повторяется одна команда - cvWriteFrame(writer, frame); Количество итераций этого цикла и изменяет скорость записи-воспроизведения
  3. Не работает функция cvWriteFrame

    Вопрос закрытия приложения решил.Осталась одна проблема,которую решить не получается самому.Почему-то записанное видео имеет скорость значительно выше оригинала. Пробовал менять параметр cvWaitKey, пробовал менять fps - ничего не помогает.
  4. Не работает функция cvWriteFrame

    У меня не камера ( с камерой у меня было все просто и даже ОТЛИЧНО ).Там захват делал opencv ,а мне оставалось лишь или записать или отправить на форму в picturebox,что тоже не являлось проблемой ). Здесь у меня захват экрана ,передача в opencv и там запись.Но захват экрана происходит в цикле,который теперь (кстати,благодаря Вашей помощи) прерывается по команде. А форма не закрывается и что-то там себе отрабатывает,что хорошо слышно по звуку винта
  5. Не работает функция cvWriteFrame

    Запустил цикл в компоненте BackgroundWorker.Теперь цикл прерывается . Однако закрыть Form не получается, причем не зависает ( в диспетчере задач "Работает",а не "Не отвечает" ).Может мусор за циклом убирается долго ? Или какая может быть причина ?
  6. Не работает функция cvWriteFrame

    Сомневаюсь.что сам убирает, пока frame=nullptr не прописал память переполнялась.К тому же ,не зря ведь функцию cvReleaseImage для освобождения ресурсов в библиотеку добавили
  7. Не работает функция cvWriteFrame

    Спасибо,обязательно посмотрю. И еще один вопрос - у меня первоначально перегружалась память. Я решил в конце каждого цикла ее освобождать через cvReleaseImage. Но получаю ошибку - cvReleaseImage: невозможно преобразовать параметр 1 из "cli::interior_ptr<Type>" в "IplImage **"Ту я не могу понять в чем дело. ведь frame объявлен как IplImage*frame Когда я вместо этого написал frame = nullptr - ошибка исчезла.Если можете,объясните,в чем проблема ?
  8. Не работает функция cvWriteFrame

    Вы имеете в виду this->Close() ? Я не знаю ,что не работает с формами. Дело в том ,что в моих предыдущих проектах я цикл спокойно разрывал (правда не через break, а через button1Click while(N==k) { ...пошел цикл..) button2_Click { N !=k} Но сейчас этот метод не работает. Но ведь раньше с opencv на форме работал! Правда,сам цикл был проще
  9. Не работает функция cvWriteFrame

    вопрос решил - Format32bppRgb поменял на Format24bppRgb и число каналов в cvCreateImage c 4 на 3 Есть новая проблема - вставил в цикл для разрыва цикла сhar c; if(c==27) { break;} Не работает. Программа перестает отвечать через пару секунд после нажатия Button. При этом запись успешно продолжается, а остановить получается лишь через Диспетчер устройств
  10. OpenCV и WinForms

    Как преобразовать Bitmap (System::Drawing::Image) в IplImage*frame (openCV)?
  11. OpenCV и WinForms

    К сожалению в указанной ветке есть только обратная конвертация - IplImage в bitmap
×