ValeryV
-
Количество публикаций
11 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные пользователем ValeryV
-
-
Вопрос закрытия приложения решил.Осталась одна проблема,которую решить не получается самому.Почему-то записанное видео имеет скорость значительно выше оригинала. Пробовал менять параметр cvWaitKey, пробовал менять fps - ничего не помогает.
-
У меня не камера ( с камерой у меня было все просто и даже ОТЛИЧНО ).Там захват делал opencv ,а мне оставалось лишь или записать или отправить на форму в picturebox,что тоже не являлось проблемой ). Здесь у меня захват экрана ,передача в opencv и там запись.Но захват экрана происходит в цикле,который теперь (кстати,благодаря Вашей помощи) прерывается по команде. А форма не закрывается и что-то там себе отрабатывает,что хорошо слышно по звуку винта
-
Запустил цикл в компоненте BackgroundWorker.Теперь цикл прерывается . Однако закрыть Form не получается, причем не зависает ( в диспетчере задач "Работает",а не "Не отвечает" ).Может мусор за циклом убирается долго ? Или какая может быть причина ?
-
Сомневаюсь.что сам убирает, пока frame=nullptr не прописал память переполнялась.К тому же ,не зря ведь функцию cvReleaseImage для освобождения ресурсов в библиотеку добавили
-
Спасибо,обязательно посмотрю. И еще один вопрос - у меня первоначально перегружалась память. Я решил в конце каждого цикла ее освобождать через cvReleaseImage. Но получаю ошибку - cvReleaseImage: невозможно преобразовать параметр 1 из "cli::interior_ptr<Type>" в "IplImage **"
Ту я не могу понять в чем дело. ведь frame объявлен как IplImage*frameКогда я вместо этого написал frame = nullptr - ошибка исчезла.Если можете,объясните,в чем проблема ?
-
Вы имеете в виду this->Close() ?
Я не знаю ,что не работает с формами. Дело в том ,что в моих предыдущих проектах я цикл спокойно разрывал (правда не через break, а через
button1Click
while(N==k)
{ ...пошел цикл..)
button2_Click { N !=k}
Но сейчас этот метод не работает. Но ведь раньше с opencv на форме работал!
Правда,сам цикл был проще
-
вопрос решил -
Format32bppRgb поменял на Format24bppRgb и число каналов в cvCreateImage c 4 на 3
Есть новая проблема - вставил в цикл для разрыва цикла
сhar c;
if(c==27)
{ break;}
Не работает. Программа перестает отвечать через пару секунд после нажатия Button. При этом запись успешно продолжается, а остановить получается лишь через Диспетчер устройств
-
Помогите разобраться почему не работает программа для записи видео с экрана.Программа компилируется,но при запуске выскакивает исключение 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 (да и вообще в программировании) новичок, так что не очень критикуйте за допущенные ошибки
-
К сожалению в указанной ветке есть только обратная конвертация - IplImage в bitmap
-
Как преобразовать Bitmap (System::Drawing::Image) в IplImage*frame (openCV)?
Не работает функция cvWriteFrame
в OpenCV
Опубликовано · Report reply
Решил проблему скорости.Возможно примитивно,но решение работает. Понимая,что не могу (или еще не умею) увеличить продолжительность воспроизведения каждого frame я решил просто увеличить количество одинаковых frame в каждом цикле.Т.е. в основном цикле создаю внутрений while в котором повторяется одна команда -
cvWriteFrame(writer, frame);