Flame 1 Report post Posted April 27, 2012 Smorodov, прошу прощения, не прочитал что там у вас реализация в отдельном потоке, сейчас буду разбираться, спасибо вам! Share this post Link to post Share on other sites
slicktail 1 Report post Posted May 29, 2012 А каким образом можно в clr-проекте сделать кнопку, при нажатии на которую бы вызывались все функции, написанные не под win forms? Например, button: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { cv::Mat frame2 = cv::imread("1.bmp",1); cv::namedWindow("My Window", CV_WINDOW_AUTOSIZE); cv::imshow("My Window",frame2); } Появляется окно созданное, и тут же возникает ошибка. "External component has thrown an exception." Share this post Link to post Share on other sites
СергейСергей 0 Report post Posted May 31, 2012 Здравствуйте! Помогите пожалуйста разобраться. При использовании функции cvCvtColor() картинка в pictureBox1 начинает троиться, когда убираю её и получаю кадр напрямую из видео потока то все хорошо! Заметил что после функции cvCvtColor меняется формат пикселей с RGB на GRAV может дело в этом? private: System::Void TimerTickEvent(System::Object^ sender, System::EventArgs^ e) { if (VI.isFrameNew(device1)){ VI.getPixels(device1, (unsigned char *)frame->imageData, true, true); // получение пикселей в RGB dst=cvCreateImage( cvGetSize(frame), IPL_DEPTH_8U, 1 ); cvCvtColor(frame, dst, CV_RGB2GRAY);//Полутон Image ^image = gcnew Bitmap(dst->width, dst->height,dst->widthStep, PixelFormat::Format24bppRgb, IntPtr(dst->imageData)); this->pictureBox1->Image = image; }; } Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted May 31, 2012 Очевидно, что для серой картинки PixelFormat::Format24bppRgb не подходит. Нет? Share this post Link to post Share on other sites
СергейСергей 0 Report post Posted May 31, 2012 Попробую поменять форматы, о результатах отпишусь. Идея хорошая, спасибо! Судя по всему нужно преобразовать в формат 8 бит, поэтому и получается три кадра в одном. Вопрос наверное не скромный но может кто знает как это сделать?) Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted May 31, 2012 Конечно знает! Надо ставить в однозначно соответствие PixelFormat и цветовое пространство изображения. Если не получается, то проводить промежуточную конвертацию. Share this post Link to post Share on other sites
СергейСергей 0 Report post Posted June 1, 2012 Формат преобразовал с помощью Format8bppIndexed. Кадры перестали троица, но как GRAV привести к RGB? это нужно обрабатывать каждый пиксель GRAV и записывать в каналы RGB. Или можно как нибудь попроще сделать? Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted June 1, 2012 Неясна постановка задачи. Если надо выводить именно преобразованный кадр, а он серый, то цветным его уже не сделать. Или надо просто сконвертировать его в RGB? Тогда вызови ту же cvCvtColor. Или что-то другое? Share this post Link to post Share on other sites
СергейСергей 0 Report post Posted June 1, 2012 Нужно просто вывести полутоновое изображение в pictureBox1, преобразовать в полутон желательно с помощью стандартных функций OpenCV. Сконвертировать в RGB с помощью cvCvtColor я не знаю как(, и возможно ли это вообще? Share this post Link to post Share on other sites
СергейСергей 0 Report post Posted June 1, 2012 В принципе вопрос снят. Так как при переводе изображения в монохромное(а мне с таким и нужно работать) в pictureBox выводится адекватная картинка. Но все же интересно как в pictureBox отобразить полутон если не совпадает цветовая палитра. Неужели нужно приводить к битмапу и там менять каждый пиксель RGB. Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted June 2, 2012 Ну да, по-другому не получится. Share this post Link to post Share on other sites
sysxxx 1 Report post Posted June 23, 2012 таким образом ничего не выходит: this->pictureBox1->Image = gcnew Bitmap(frame->cols, frame->rows, frame->step, PixelFormat::Format24bppRgb, IntPtr(frame->data)); изображение не выводится - черный экран. и в выложеенном примере (VideoOnForm.zip) тоже самое. в чем беда? выложите алгоритм преобразования Сv::Mat to Drawing::Bitmap! Share this post Link to post Share on other sites
sysxxx 1 Report post Posted June 23, 2012 код: private: cv::VideoCapture *capture; cv::Mat frame; int k; System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { pictureBox1->Image = nullptr; if( capture->isOpened() ) capture->release(); if(!capture->open(0)) { MessageBox::Show("Cannot open WebCam"); return; } int fps = (int)capture->get(CV_CAP_PROP_FPS); if(fps == 0) fps = 24; timer1->Interval = 1000/fps; timer1->Start(); } private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { cv::Mat frame; capture->read(frame); if(frame.empty()) { this->pictureBox1->Image = nullptr; return; } this->pictureBox1->Image = gcnew Bitmap(frame.cols, frame.rows, frame.step, PixelFormat::Format24bppRgb, IntPtr(frame.data)); frame.release(); } 1 Share this post Link to post Share on other sites
<Elena> 0 Report post Posted October 10, 2012 Здравствуйте. При попытке компиляции любого проекта с Windows Forms, к которому подключена OpenCV (даже просто содержащего стандартную форму, и все), MSVS виснет глубоко и надолго. Причем компиляция, видимо, проходит успешно и создается рабочий exe-шник. Студия при этом находится в статусе (Выполнение) и пишет "Загрузка символов для d:\Forms\Forms\Debug\Forms.exe" С чем это может быть связано и, главное, как с этим бороться? MSVS 2008, OpenCV 2.3.1 Share this post Link to post Share on other sites
Smorodov 579 Report post Posted October 10, 2012 А если просто построить (Build). А после этого запускать получившийся екзешник из Windows (не из IDE)? Он запустится? Share this post Link to post Share on other sites
<Elena> 0 Report post Posted October 11, 2012 Да, запускается Share this post Link to post Share on other sites
Smorodov 579 Report post Posted October 11, 2012 Побросайте, .dll и .pdb к exe-шнику, установите рабочую директорию на директорию с exe-шником. Должно работать, скорее всего студия не может найти файлы с отладочной информацией (.pdb) библиотек. Правда не уверен поможет или нет, у меня такой проблемы не было. Share this post Link to post Share on other sites
nvn2030 0 Report post Posted January 3, 2013 Подскажите плиз что необходимо дописать чтобы форма закрывалась, при нажатии на крестик форма не закрывается cv::Mat pic; cv::VideoCapture cap("rtsp://192.168.0.112/vis"); cv::namedWindow("Video",0); if(!cap.isOpened()) { cout << "Error"; return 0xDEAD; } while (cv::waitKey(10) == -1) { cap >> pic; cv::imshow("Video",pic); } return 0; и еще при просмотре видео с камеры нижняя часть видео плывет, что может быть? Share this post Link to post Share on other sites
nvn2030 0 Report post Posted January 3, 2013 Если включить обычную веб камеру то видео показывает нормально, ip камеру через rtsp://192.168.0.112/vis то нижняя часть примерно 5 часть от всего видео начинает плыть и дергаться. Если данную камеру просмотреть через VLC media player то показывает чуть потторможено но ничего не плывет Share this post Link to post Share on other sites
Smorodov 579 Report post Posted January 3, 2013 Скорее всего это надо смотреть ffmpeg, opencv через нее работает с IP камерами. Можно попробовать еще задать адрес в виде rtsp://192.168.0.112/vis?.mjpg ,задав таким образом формат потока. ЗЫ: У меня таких проблем с IP-шками не наблюдалось. Share this post Link to post Share on other sites
nvn2030 0 Report post Posted January 5, 2013 Подскажите плиз как в С++ изменить размер окна и сделать его поверх всех окон? нашел функцию SetWindowPos(window, HWND_TOP, 0, 0, 0, 0,SWP_NOMOVE | SWP_NOSIZE); пишет что SetWindowPos: идентификатор не найден как подключить библиотеку user32 к своей программе чтобы такой ошибки не было? Share this post Link to post Share on other sites
Smorodov 579 Report post Posted January 5, 2013 надо подключить заголовочник windows.h Здесь все написано Share this post Link to post Share on other sites
nvn2030 0 Report post Posted January 5, 2013 а как узнать HWND hWnd? использую cvNamedWindow("name",0); Share this post Link to post Share on other sites
Smorodov 579 Report post Posted January 5, 2013 FindWindow http://www.firststeps.ru/mfc/winapi/win/r.php?69 MSDN Share this post Link to post Share on other sites
Chemist 0 Report post Posted January 16, 2013 Пытаюсь вывести изображение вот таким вот образом: // получаем следующий кадр frame = cvQueryFrame( capture ); // показываем кадр pictureBox1->Image = gcnew System::Drawing::Bitmap( frame->width,frame->height,frame->widthStep,System::Drawing::Imaging::PixelFormat::Undefined, ( System::IntPtr ) frame-> imageData); Но возникает ошибка: Необработанное исключение типа "System.NullReferenceException" Share this post Link to post Share on other sites