Flame 1 Жалоба Опубликовано April 27, 2012 Smorodov, прошу прощения, не прочитал что там у вас реализация в отдельном потоке, сейчас буду разбираться, спасибо вам! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
slicktail 1 Жалоба Опубликовано 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." Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
СергейСергей 0 Жалоба Опубликовано 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; }; } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано May 31, 2012 Очевидно, что для серой картинки PixelFormat::Format24bppRgb не подходит. Нет? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
СергейСергей 0 Жалоба Опубликовано May 31, 2012 Попробую поменять форматы, о результатах отпишусь. Идея хорошая, спасибо! Судя по всему нужно преобразовать в формат 8 бит, поэтому и получается три кадра в одном. Вопрос наверное не скромный но может кто знает как это сделать?) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано May 31, 2012 Конечно знает! Надо ставить в однозначно соответствие PixelFormat и цветовое пространство изображения. Если не получается, то проводить промежуточную конвертацию. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
СергейСергей 0 Жалоба Опубликовано June 1, 2012 Формат преобразовал с помощью Format8bppIndexed. Кадры перестали троица, но как GRAV привести к RGB? это нужно обрабатывать каждый пиксель GRAV и записывать в каналы RGB. Или можно как нибудь попроще сделать? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано June 1, 2012 Неясна постановка задачи. Если надо выводить именно преобразованный кадр, а он серый, то цветным его уже не сделать. Или надо просто сконвертировать его в RGB? Тогда вызови ту же cvCvtColor. Или что-то другое? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
СергейСергей 0 Жалоба Опубликовано June 1, 2012 Нужно просто вывести полутоновое изображение в pictureBox1, преобразовать в полутон желательно с помощью стандартных функций OpenCV. Сконвертировать в RGB с помощью cvCvtColor я не знаю как(, и возможно ли это вообще? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
СергейСергей 0 Жалоба Опубликовано June 1, 2012 В принципе вопрос снят. Так как при переводе изображения в монохромное(а мне с таким и нужно работать) в pictureBox выводится адекватная картинка. Но все же интересно как в pictureBox отобразить полутон если не совпадает цветовая палитра. Неужели нужно приводить к битмапу и там менять каждый пиксель RGB. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано June 2, 2012 Ну да, по-другому не получится. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
sysxxx 1 Жалоба Опубликовано 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! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
sysxxx 1 Жалоба Опубликовано 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 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
<Elena> 0 Жалоба Опубликовано October 10, 2012 Здравствуйте. При попытке компиляции любого проекта с Windows Forms, к которому подключена OpenCV (даже просто содержащего стандартную форму, и все), MSVS виснет глубоко и надолго. Причем компиляция, видимо, проходит успешно и создается рабочий exe-шник. Студия при этом находится в статусе (Выполнение) и пишет "Загрузка символов для d:\Forms\Forms\Debug\Forms.exe" С чем это может быть связано и, главное, как с этим бороться? MSVS 2008, OpenCV 2.3.1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 10, 2012 А если просто построить (Build). А после этого запускать получившийся екзешник из Windows (не из IDE)? Он запустится? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
<Elena> 0 Жалоба Опубликовано October 11, 2012 Да, запускается Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано October 11, 2012 Побросайте, .dll и .pdb к exe-шнику, установите рабочую директорию на директорию с exe-шником. Должно работать, скорее всего студия не может найти файлы с отладочной информацией (.pdb) библиотек. Правда не уверен поможет или нет, у меня такой проблемы не было. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
nvn2030 0 Жалоба Опубликовано 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; и еще при просмотре видео с камеры нижняя часть видео плывет, что может быть? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
nvn2030 0 Жалоба Опубликовано January 3, 2013 Если включить обычную веб камеру то видео показывает нормально, ip камеру через rtsp://192.168.0.112/vis то нижняя часть примерно 5 часть от всего видео начинает плыть и дергаться. Если данную камеру просмотреть через VLC media player то показывает чуть потторможено но ничего не плывет Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 3, 2013 Скорее всего это надо смотреть ffmpeg, opencv через нее работает с IP камерами. Можно попробовать еще задать адрес в виде rtsp://192.168.0.112/vis?.mjpg ,задав таким образом формат потока. ЗЫ: У меня таких проблем с IP-шками не наблюдалось. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
nvn2030 0 Жалоба Опубликовано January 5, 2013 Подскажите плиз как в С++ изменить размер окна и сделать его поверх всех окон? нашел функцию SetWindowPos(window, HWND_TOP, 0, 0, 0, 0,SWP_NOMOVE | SWP_NOSIZE); пишет что SetWindowPos: идентификатор не найден как подключить библиотеку user32 к своей программе чтобы такой ошибки не было? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 5, 2013 надо подключить заголовочник windows.h Здесь все написано Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
nvn2030 0 Жалоба Опубликовано January 5, 2013 а как узнать HWND hWnd? использую cvNamedWindow("name",0); Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 5, 2013 FindWindow http://www.firststeps.ru/mfc/winapi/win/r.php?69 MSDN Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chemist 0 Жалоба Опубликовано 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" Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах