Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/335: Рейтинг темы: голосов - 335, средняя оценка - 4.91
7 / 2 / 0
Регистрация: 03.04.2007
Сообщений: 4
1

Как получить изображение с веб-камеры

03.04.2007, 01:18. Показов 64939. Ответов 119
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, как получить изображение с веб-камеры через билдер, а то я хочу сделать веб-камерный шпион, но не знаю как.
2
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2007, 01:18
Ответы с готовыми решениями:

Изображение с веб камеры
Я написал программу которая снимает изображение с веб камеры!!! Возможно переписать мой код таким...

Изображение с Web-камеры
Привет, ребят... не гоните в другие темы... я согласен, что в этой теме:...

Снимок с веб камеры
как снять в билдер с++ снимок с веб камеры? в компонент TImage к примеру.

Снимок с веб-камеры
нашел такой пример, который выводит на окно видео в режиме онлайн с вэб камеры ...

119
1702 / 898 / 207
Регистрация: 25.11.2009
Сообщений: 1,847
07.02.2011, 17:07 61
Author24 — интернет-сервис помощи студентам
Как получить изображение с веб-камеры
никто не подскажет, почему у меня вылетает ошибка на этой функции?
C++
1
capDriverConnect (hWndC,0);
0
LK
Заблокирован
07.02.2011, 20:17 62
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
никто не подскажет, почему у меня вылетает ошибка на этой функции?[/CPP]
- если ты до сего времени не понял, что надо приводить хотя бы текст ошибки, то дело, я так понимаю безнадежное, пахан ...
0
1702 / 898 / 207
Регистрация: 25.11.2009
Сообщений: 1,847
07.02.2011, 21:54 63
Цитата Сообщение от LK Посмотреть сообщение
- если ты до сего времени не понял, что надо приводить хотя бы текст ошибки, то дело, я так понимаю безнадежное, пахан ...
ты просто невнимательно посмотрел. текст ошибки я привёл в более раннем посте и дал ссылку на него
вот эту
0
LK
Заблокирован
07.02.2011, 22:27 64
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
1. ты просто невнимательно посмотрел
2. текст ошибки я привёл в более раннем посте и дал ссылку на неговот эту
Начнем с конца
2. я пробовал, но получил
Запрошенная страница не существует.
Вы можете перейти на главную страницу форума
CyberForum.ru - форум программистов и сисадминов
1. да, нашел на первой странице :
C++
1
2
3
capDriverConnect (hWndC,0);
// выдаёт ошибку
External exception C0000008
- вы что-нибудь свое добавляли в код ?
0
1702 / 898 / 207
Регистрация: 25.11.2009
Сообщений: 1,847
07.02.2011, 22:30 65
нет, не менял ни строчки.
0
LK
Заблокирован
07.02.2011, 22:43 66
гм, это, конечно, танцы с бубном, но , если вы просто копировали код, попробуйте строчку capDriverConnect (hWndC,0); прописать вручную , в моей практике были и есть случаи, когда скопированный код ошибку не вызывает, но и не работает.
1
1702 / 898 / 207
Регистрация: 25.11.2009
Сообщений: 1,847
07.02.2011, 23:12 67
я не копировал код, открываю проект, который выложил Samrisbe. С его последним проектом то же самое. Хотя сами программы, скомпилированные им работают на моем компьютере без сбоев.
Завтра попробую на другом компьютере, может просто пора переустановить билдер или систему...
0
5 / 5 / 2
Регистрация: 02.01.2011
Сообщений: 64
08.02.2011, 10:29 68
Почему у меня вот такие ошибки?
[BCC32 Error] Unit1.cpp(25): E2034 Cannot convert 'char const[1]' to 'const wchar_t *'
[BCC32 Error] Unit1.cpp(25): E2342 Type mismatch in parameter 'lpszWindowName' (wanted 'const wchar_t *',
компилятору не нравятся 10-ая строчка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
hWndC=capCreateCaptureWindow("",WS_CHILD,  this->Left,
                                                this->Top,
                                            Image1->Width,
                                            Image1->Height,
                                            this->Handle,
                                            11011);capDriverConnect (hWndC,0);
 
 
 
 Timer1->Enabled=true;
}
0
2 / 2 / 0
Регистрация: 01.02.2011
Сообщений: 18
08.02.2011, 19:10 69
CaHeK_Gop, В у себя в настройках проекта в разделе дерикториес и кондишионс _Tchat to maps поменяйте на второй вариант и тогда эту ошибку выдавать небудет.
1
0 / 0 / 0
Регистрация: 19.03.2011
Сообщений: 3
19.03.2011, 19:49 70
Всем привет! Сначало хочется выразить слова благодарности автору темы и Форумчанину LK.
Благодаря вам прикрутил вебкамеру. вот только я не совсем понимаю как это дело работает...
Вот серия вопросов которые хочется уточнить:

1) как можно настраивать камеру? С кодом который дан на форуме камера работает в максимальном разрешении. при данном разрешении камера работает в 15fps, как можно настроить камеру через код на более низкое разрешение?
2) какие настройки можно задавать камерам? есть ли литература на эту тему? дайте ссылки плиз.
3) Что значит "hWndC"
Если 1-3 не столь важны то для 4-5ый вопросы не дают спокойно спать =))
4) объясните как работает запрос и выбор камеры подозреваю что секрет выбора камеры лежит в

C++
1
2
3
4
5
6
hWndC=capCreateCaptureWindow("",WS_CHILD, this->Left,
                                          this->Top,
                                          this->Width,
                                          this->Height,
                                          this->Handle, 11011);
capDriverConnect (hWndC,0);
5) Как подключить вторую камеру?

я думаю если полностью разобраться в 4ом вопросе, то 5ый должен стань проще, но как происзодит подгрузка драйвера камеры я не понял =((

За ранее благодарен!
0
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,916
20.03.2011, 22:05 71
2 Elts

>при данном разрешении камера работает в 15fps, как можно настроить камеру через код на более низкое разрешение?

Используйте однократный вызов capDlgVideoFormat().
Результат установки разрешения должен сохраняться и для следующих запусков проги (по крайней мере у меня на компе - сохраняется, даже после выключения компа - сохраняется).

>какие настройки можно задавать камерам? есть ли литература на эту тему? дайте ссылки плиз.

Курите хэлп по функциям capDlgVideoFormat(), capDlgVideoSource() - это для настроек вручную через стандартные системные диалоговые окна.
А также хэлп по структуре CAPTUREPARMS и функциям capCaptureGetSetup(), capCaptureSetSetup() для
настройки программно. Но у меня почему-то не происходит никакой реакции на изменения настроек через capCaptureSetSetup - хоть при стандартных виндовых драйверах вебки, хоть при скачанных и поставленных дополнительных драйверах от Лоджитека.

>3) Что значит "hWndC"

Имя переменной.
Возьмите-ка и почитайте учебники по программированию (чтобы таких вопросов не задавать) и учебники по ВинАПИ (чтобы разобраться с типами виндовозовских данных)

>4) объясните как работает запрос и выбор камеры подозреваю что секрет выбора камеры лежит в
>hWndC=capCreateCaptureWindow(...)

Неа. В capDriverConnect(...,i), где i - номер камеры в системе (нумерация начинается с нуля)

>5) Как подключить вторую камеру?

Одновременно с первой - никак. Это ограничение способа видеозахвата через ВидеоФорВиндоуз (именно он у Вас используется) - обмен данными между камерой и прогой идёт через системный буфер обмена (т.е. кадр с одной камеры может попасть в прогу в момент запроса кадра обработчиком данных второй камеры - получится бардак, да и размеры кадров могут не совпадать при этом). Более того - в буфер обмена вообще нельзя ничего копировать из других прог, если запущена прога видеозахвата на VideoForWindows (будет бардак - данные или еще несграбленный видеокадр либо пропадут, либо попадут в чужую прогу).
Надо две камеры и свободный буфер обмена - см. в сторону захвата через DirectShow. А VideoForWindows - мастдай вообще и существенная загрузка процессора в частности.
0
0 / 0 / 0
Регистрация: 19.03.2011
Сообщений: 3
21.03.2011, 19:52 72
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Одновременно с первой - никак
Доброго времени суток!
Уточните пожалуйста при каком подключении возможно использование 2х и более камер программой.
Есть всевозможные дополнения наподобие VideoLab, которые подключают 2 и более камер.
Честно использовать данные плаги не хочу, есть желание разобраться в вопросе без использования сторонних средств. Если есть информация поделитесь, так же приму в дар литературу, которую можно почитать по данному поводу.
За ранее благодарен.
0
шарпопочитатель
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
21.03.2011, 20:23 73
используйте openCv
0
0 / 0 / 0
Регистрация: 19.03.2011
Сообщений: 3
22.03.2011, 06:19 74
Цитата Сообщение от ht1515 Посмотреть сообщение
используйте openCv
Наверное я полный нуб в этом вопросе, кто может помочь найти рабочую версию openCv?
Ссылки которые находил в сети либо битые, либо просят регистрационные ключи.
Хотя слышал что openCv должен быть в разряде FreeWare.
Поделитесь.

Касательно предыдущего сообщения.
Вопрос возможности собственной настройки 2х камер остаётся открытым. если кто знает подскажите как.

С уважением.
0
шарпопочитатель
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
22.03.2011, 10:02 75
http://sourceforge.net/project... v-win/2.2/

битые?
0
Фрилансер
49 / 34 / 7
Регистрация: 12.01.2010
Сообщений: 186
Записей в блоге: 1
22.03.2011, 11:31 76
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
   CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY); //cvCaptureFromCAM( 0 );
   assert( capture );
 
   IplImage* frame = 0;
 
   cvNamedWindow("capture", CV_WINDOW_AUTOSIZE);
   int counter = 0;
   char filename[ 512 ];
 
   while( true )
   {
      frame = cvQueryFrame( capture );
 
      cvShowImage("capture", frame);
 
      char c = cvWaitKey(33);
      if( c == 27 ) // ESC
      {
         break;
      }
      else
         if( c == 13 )  // Enter
         {
            cvSaveImage(filename, frame);
            counter++;
         }
   }
   cvReleaseCapture( &capture );
   cvDestroyWindow("capture");
0
2 / 2 / 0
Регистрация: 01.02.2011
Сообщений: 18
24.03.2011, 21:51 77
to Elts:
Курите хэлп по функциям capDlgVideoFormat(), capDlgVideoSource() - это для настроек вручную через стандартные системные диалоговые окна.
Например в вин 7 на рад ХЕ работают некорректно) список разрешений выдают не соотвествующий действительности, праметры не сохраняются а некоторые меняя в реальности изменениям не подлежат(такие как автофокус к примеру или выдержка); max разрешение 640*480 при камерах для 720p Указание номера камеры тож неработает) ток через опэндиалог) при танцах с бубном две камеры через вфв можно одновременно включить, но 15 фпс так и останутся)
метод явно стар, хотя не исключенно что должны быть какиенить обновления
см. в сторону захвата через DirectShow.
Дык) Ток посылов в ту степь много, а реального примера или описания на современный набор библиотек нету Ну в случае исходников SampleCap, к примеру. Есть следы попыток решения проблем с dxtrans.h и qedit.h Если ваш уровень достаточен что бы понять то как их устранить - то может быть все получится) Хотя сомнения меня терзают - тк не задавали бы тут вопрос Во вяком случае я пока не разобрался DD
0
8 / 3 / 0
Регистрация: 05.03.2011
Сообщений: 11
25.03.2011, 22:13 78
а нельзя ли с помощью Оpen CV вывести видео с камеры не в отдельном окне а на форму(в пикчебокс)?
и если можно то как?
0
Фрилансер
49 / 34 / 7
Регистрация: 12.01.2010
Сообщений: 186
Записей в блоге: 1
25.03.2011, 23:59 79
Цитата Сообщение от Vl_nik Посмотреть сообщение
а нельзя ли с помощью Оpen CV вывести видео с камеры не в отдельном окне а на форму(в пикчебокс)?
И сказал я: "Да будет видео на ворме там где я хочу!",
И добавил компонент на форму в котором будет видео,
И видио появилось на форме ...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#define WIDTHBYTES(bits) ((((bits) + 31) / 32) * 4)
void  APIDrawIpl(int x,int y,IplImage* _Grab,void *HANDLE);
HBITMAP CreateRGBBitmap( IplImage* _Grab );
 
...........
 
//---------------------------------------------------------------------------
CvCapture *capture;
IplImage *frame = 0, *frame_copy = 0;
int counter = 0;
char filename[ 512 ];
void __fastcall TFormOptions::Button7Click(TObject *Sender)
{
   Timer1->Enabled = !Timer1->Enabled;
   if( Timer1->Enabled )
   {
      capture = cvCreateCameraCapture( CV_CAP_ANY );
      assert( capture );
   }
   else
   {
      cvReleaseCapture( &capture );
   }
}
//---------------------------------------------------------------------------
 
void __fastcall TFormOptions::Timer1Timer(TObject *Sender)
{
   frame = cvQueryFrame( capture );
   if( !frame_copy )
      frame_copy = cvCreateImage(   cvSize( ScrollBox3->Width, ScrollBox3->Height ),
                                               IPL_DEPTH_8U, frame->nChannels );
   cvResize( frame, frame_copy, CV_INTER_LINEAR );
   APIDrawIpl( 0, 0, frame_copy, FormOptions->ScrollBox3->Handle );
}
//---------------------------------------------------------------------------
HBITMAP CreateRGBBitmap( IplImage* _Grab )
{
   char *App;
   IplImage *_Grab3=0,*_Grabf=0;
 
   LPBITMAPINFO lpbi = new BITMAPINFO;
 
   lpbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
   lpbi->bmiHeader.biWidth = _Grab->width;
   lpbi->bmiHeader.biHeight =_Grab->height;
   lpbi->bmiHeader.biPlanes = 1;
   lpbi->bmiHeader.biBitCount = 24;
   lpbi->bmiHeader.biCompression = BI_RGB;
   lpbi->bmiHeader.biSizeImage = WIDTHBYTES((DWORD)_Grab->width * 8) * _Grab->height;
   lpbi->bmiHeader.biXPelsPerMeter = 0;
   lpbi->bmiHeader.biYPelsPerMeter = 0;
   lpbi->bmiHeader.biClrUsed = 0;
   lpbi->bmiHeader.biClrImportant = 0;
 
   void* pBits;
   HBITMAP hBitmap = CreateDIBSection( NULL, lpbi, DIB_RGB_COLORS,
                                           (void **)&pBits, NULL, 0 );
   delete lpbi;
 
   if( hBitmap )
      App = (char*)pBits;
 
   if( _Grab->depth != IPL_DEPTH_8U )
   {
      _Grabf = cvCloneImage( _Grab );
      if( _Grab )
      {
         cvReleaseImage( &_Grab );
      }
        _Grab = cvCreateImage( cvSize( _Grabf->width, _Grabf->height ), IPL_DEPTH_8U, _Grabf->nChannels );
        cvConvert(_Grabf,_Grab);
        if( _Grabf )
      {
         cvReleaseImage( &_Grabf );
      }
   }
 
   if( _Grab->nChannels == 1 )
   {
      _Grab3 = cvCreateImage( cvSize(_Grab->width,_Grab->height),IPL_DEPTH_8U,3);
      cvMerge(_Grab,_Grab,_Grab,NULL,_Grab3);
   }
 
   if( _Grab->nChannels == 3 )
   {
      _Grab3 = _Grab;
   }
 
   unsigned char* data;
   cvGetRawData( _Grab3, (uchar**)&data );
 
   if( _Grab3 )
   {
      for( int i = 0; i < _Grab->height; i ++ )
      {
         memcpy(App+_Grab3->widthStep*(_Grab3->height-i-1),data+_Grab3->widthStep*i,_Grab3->width*3);
      }
   }
 
   if( _Grab->nChannels == 1 )
   {
      cvReleaseImage( &_Grab3 );
   }
 
   return hBitmap;
}
//----------------------------------------------------------------------------------
void  APIDrawIpl( int x, int y, IplImage* _Grab, void *HANDLE )
{
   HDC hMemDC,hDC;
   hDC = GetDC( HANDLE );
   hMemDC = CreateCompatibleDC( hDC );
   HBITMAP Bitmap = CreateRGBBitmap( _Grab );
   SelectObject( hMemDC, Bitmap );
   BitBlt( hDC, x, y, _Grab->width, _Grab->height, hMemDC, 0, 0, SRCCOPY );
 
   DeleteObject( Bitmap );
   DeleteDC( hMemDC );
   DeleteDC( hDC );
}
//---------------------------------------------------------------------------
void __fastcall TFormOptions::FormClose(TObject *Sender,
      TCloseAction &Action)
{
   if( Timer1->Enabled )
   {
      Timer1->Enabled = false;
      cvReleaseCapture( &capture );
   }
}
//---------------------------------------------------------------------------
0
8 / 3 / 0
Регистрация: 05.03.2011
Сообщений: 11
26.03.2011, 11:35 80
Спасибо!!
попробую переписать код на Visuall C++ поскольку я пишу на нем
0
26.03.2011, 11:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2011, 11:35
Помогаю со студенческими работами здесь

Запись видео с веб камеры
Новичок в этом деле. Я даже не знаю в какую тему мой вопрос опубликовать. Сейчас набираю теорию...

Захват видео с веб-камеры (C++)
Здравствуйте! Я установил Visual Studio 2015 Community и библиотеку OpenCV 3.1.0 на Windows 10....

Снимок с веб камеры без использования буфера
Всем привет. Такой вопрос: можно ли копировать снимок не в буфер, а например, сразу в поток?...

Черный экран при снимке с веб камеры
Всем привет. Надыбал такой код и поставил на кнопку: hWndC=capCreateCaptureWindow(&quot;&quot;,WS_CHILD,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru