Smorodov 579 Жалоба Опубликовано December 23, 2011 cv::WaitKey нужон, т.к. именно в этой функции происходит обработка сообщений окна, а соответственно и вывод. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
slicktail 1 Жалоба Опубликовано December 25, 2011 cv::WaitKey нужон, т.к. именно в этой функции происходит обработка сообщений окна, а соответственно и вывод. Зачем здесь WaitKey, вывод ведь на форму осуществляется? Да и до этого не доходит, изображение считать не получается во frame. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 25, 2011 Может так сработает?: frame = cv::imread("C:\\1.bmp",-1); Значения для параметра flags: >0 загружается трехканальное цветное изображение =0 загружается изображение в серых тонах <0 загружается "как есть". Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Виктор 0 Жалоба Опубликовано January 8, 2012 Здравствуйте, столкнулся с проблемой. Как сделать так, что бы вывести изображение с камеры в оконом (не MFC/консольное) приложении? То есть сейчас у меня консольное и создается для каждой камеры новое окно. Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано January 9, 2012 Куда вывести-то? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Виктор 0 Жалоба Опубликовано January 9, 2012 Куда вывести-то? В форму) Кажется я догадался что как почитав ни много форум. Smorodov Спасибо за перенос. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
trinka 1 Жалоба Опубликовано March 31, 2012 кто знает какой параметр преобразования использовать в ф-ии Image ^img = gcnew Bitmap(frame.cols, frame.rows, frame.step, PixelFormat::Format24bppRgb, IntPtr(frame.data)); а именно PixelFormat для CV_8U? пробовал PixelFormat::Format8bppIndexed, но израбоажение какое-то испорченное, но в принципе показывается. может его нужно как-то преобразовать? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 31, 2012 Пост №7 из это темы не подходит? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
trinka 1 Жалоба Опубликовано March 31, 2012 Пост №7 из это темы не подходит? да в другом косяк был, забыл делать сглаживание Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JoQeR 0 Жалоба Опубликовано April 5, 2012 Здравствуйте! Можете объяснить как для визуализации кадров полученых с камеры использовать Tick таймера? Никола написал в посте, что его использует. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 5, 2012 Это читали? Ссылка на MSDN. Там есть ссылка на пример. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
nagoHok 4 Жалоба Опубликовано April 5, 2012 Здравствуйте! Можете объяснить как для визуализации кадров полученых с камеры использовать Tick таймера? Никола написал в посте, что его использует. Не советую использовать для этого таймер, ибо в карте сообщений системы он стоит самый последний, лучше для этого организовать отдельный поток. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 5, 2012 Согласен, что отдельный поток лучше. ЗЫ: есть еще мультимедиа таймер. У него приоритет повыше и точность до 1 мс. Но можно хорошо систему подвесить при неаккуратном использовании. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JoQeR 0 Жалоба Опубликовано April 5, 2012 Спасибо, попробую реализовать потоками. А так сам пытался сделать используя этот пример MSDN Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JoQeR 0 Жалоба Опубликовано April 11, 2012 Написал подобный код, всё-таки с использованием таймера , пока что эксперементирую)В результате вроде все работает нормально, НО при закрытии формы (клик по баттон2) процесс остается висеть в диспетчере задач. Я так понял, что CvCapture не удаляется и не отпускает программу? Или в чем то другом косячу? Также при попытке вызывать cvReleasecapture(&capture) возникает ошибка. Еще заметил, что со временем, пусть медленно н оверно, начинает расти объем памяти занимаемы процессом. Помогите пожалуйста) ... private: CvCapture *capture; IplImage *frame; ... private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { // получаем кадр frame = 0; frame = cvQueryFrame( capture ); // Копирование IplImage в объект .NET типа Image Image ^image = gcnew Bitmap(frame->width, frame->height,frame->widthStep, PixelFormat::Format24bppRgb, IntPtr(frame->imageData)); // показываем this->pictureBox1->Image = image; char c = cvWaitKey(33); if (c == 27) { // нажата ESC timer1->Stop(); } } ... private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { timer1->Stop(); //cvReleaseCapture(&capture); // <----- ошибка this->Close(); } ... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 11, 2012 char c = cvWaitKey(33); А таймер на какой интервал? Я обычно делаю так: 1. Ставлю таймер (one shot). 2. В калбэке его останавливаю. 3. Выполняю все что нужно. 4. Запускаю следующий интервал. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JoQeR 0 Жалоба Опубликовано April 11, 2012 Т.е. char c = cvWaitKey(33); держит процесс?? Таймер на интервал 50 мс. А что насчет cvReleaseCapture? Почему вылезает ошибка на несоотвествие типов? И насчет роста занимаемого объема памяти можете что-нибудь посоветовать? А то напрягает очень, здесь на форуме находил про утечки памяти, но здесь похоже что то другое. За раннее спасибо! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 11, 2012 capture сделайте static - ом. По поводу утечки не знаю, ибо в clr я слаб. Мне не нравится это: Image ^image = gcnew Bitmap(frame->width, frame->height,frame->widthStep, PixelFormat::Format24bppRgb, IntPtr(frame->imageData));[/code] я привык к каждому new видеть delete, но вроде это само выгребаеться должно. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JoQeR 0 Жалоба Опубликовано April 11, 2012 На самом деле пробовал я удалять с помощью delete image, всё равно растет. Единственно что утешает, это что память занимается очень медленно, иногда чуток убывает. Но все равно спасибо вам) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JoQeR 0 Жалоба Опубликовано April 12, 2012 Чет всё равно не удается закрыть процесс( Что еще можно сделать? Что именно с cvWaitKey() проделать? И зачем делать capture статиком? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JoQeR 0 Жалоба Опубликовано April 12, 2012 Решил проблемму с закрытием процесса, но по-моему как то по извращенски просто переопределив переменную в обработчике закрытия формы. Потому что static у CvCapture *capture, ничего не изменил и не устранил ошибку с cvReleaseCapture: private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { CvCapture *capture; // Переопределяем capture и удаляем этот объект timer1->Stop(); capture = cvCreateCameraCapture(CV_CAP_ANY); cvReleaseCapture(&capture); this->Close(); } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Антон 0 Жалоба Опубликовано April 20, 2012 Здравствуйте! Никак не могу подключить openCV 2.3.1 к VC++. Подключил dll-ки как в посте №7. Библиотеки #include <opencv/cv.h> #include <opencv/highgui.h>. Приложение Windows Forms. Что бы я не делал выдает ошибки на какой-то cvRound (10 ошибок). Код и форма пустые... Помогите, пожалуйста. Ах да, компилятор Visual C++ 2008 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Антон 0 Жалоба Опубликовано April 20, 2012 Прошу прощения, вопрос решил) Забыл изменить: General/Common Language Runtime Support: Common Language Runtime Support (/clr) До этого стоял: CLR-поддержка чистого MSIL (/clr:pure) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Flame 1 Жалоба Опубликовано April 27, 2012 Не советую использовать для этого таймер, ибо в карте сообщений системы он стоит самый последний, лучше для этого организовать отдельный поток. Подскажите как это реализовать? Без таймера используя OpenCV как сделать захват кадров? WaitKey не предлагать. Есть такой код: (Вариант 1) private void button6_Click(object sender, EventArgs e) { CvCapture capture = CvCapture.FromCamera(0); CvWindow windowCapture = new CvWindow("SampleCapture"); while (CvWindow.WaitKey(33) < 0) { pictureBox1.Image = capture.QueryFrame().ToBitmap(); } } Изображение выводится на форму но и окно появляется ненужное. И изображение чуть дерганое. Изменяем код на такой: (Вариант 2) private void button6_Click(object sender, EventArgs e) { CvCapture capture = CvCapture.FromCamera(0); //CvWindow windowCapture = new CvWindow("SampleCapture"); while (CvWindow.WaitKey(33) < 0) { pictureBox1.Image = capture.QueryFrame().ToBitmap(); pictureBox1.Refresh(); } } Изображение вроде как плавнее становится, но и проц программа сильнее юзает, ибо pictureBox1.Refresh() в цикле видимо не есть хорошо, к тому же окно с программой перестает реагировать на события от мышки, тоесть сделать с ним ничего нельзя. Вариант с таймером: CvCapture capture; private void button6_Click(object sender, EventArgs e) { capture = CvCapture.FromCamera(0); timer1.Start(); } private void timer1_Tick(object sender, EventArgs e) { pictureBox1.Image = capture.QueryFrame().ToBitmap(); } Изображение так же чуть дерганое как в первом варианте. А как сделать отдельный поток? Или в отдельном потоке будет свой таймер? Использую OpenCVSharp, но это тут непринципиально, просто хочу понять принцип как в отдельном потоке сделать Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано April 27, 2012 Пост №9 смотрели? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах