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

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

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

Студворк — интернет-сервис помощи студентам
Помогите, как получить изображение с веб-камеры через билдер, а то я хочу сделать веб-камерный шпион, но не знаю как.
2
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2007, 01:18
Ответы с готовыми решениями:

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

Изображение с Web-камеры
Привет, ребят... не гоните в другие темы... я согласен, что в этой теме: https://www.cyberforum.ru/cpp-builder/thread1737.html Всё...

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

119
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
07.02.2011, 17:07
Студворк — интернет-сервис помощи студентам
Как получить изображение с веб-камеры
никто не подскажет, почему у меня вылетает ошибка на этой функции?
C++
1
capDriverConnect (hWndC,0);
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.02.2011, 20:17
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
никто не подскажет, почему у меня вылетает ошибка на этой функции?[/CPP]
- если ты до сего времени не понял, что надо приводить хотя бы текст ошибки, то дело, я так понимаю безнадежное, пахан ...
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
07.02.2011, 21:54
Цитата Сообщение от LK Посмотреть сообщение
- если ты до сего времени не понял, что надо приводить хотя бы текст ошибки, то дело, я так понимаю безнадежное, пахан ...
ты просто невнимательно посмотрел. текст ошибки я привёл в более раннем посте и дал ссылку на него
вот эту
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.02.2011, 22:27
Цитата Сообщение от Lelik-pahan Посмотреть сообщение
1. ты просто невнимательно посмотрел
2. текст ошибки я привёл в более раннем посте и дал ссылку на неговот эту
Начнем с конца
2. я пробовал, но получил
Запрошенная страница не существует.
Вы можете перейти на главную страницу форума
CyberForum.ru - форум программистов и сисадминов
1. да, нашел на первой странице :
C++
1
2
3
capDriverConnect (hWndC,0);
// выдаёт ошибку
External exception C0000008
- вы что-нибудь свое добавляли в код ?
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
07.02.2011, 22:30
нет, не менял ни строчки.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.02.2011, 22:43
гм, это, конечно, танцы с бубном, но , если вы просто копировали код, попробуйте строчку capDriverConnect (hWndC,0); прописать вручную , в моей практике были и есть случаи, когда скопированный код ошибку не вызывает, но и не работает.
1
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
07.02.2011, 23:12
я не копировал код, открываю проект, который выложил Samrisbe. С его последним проектом то же самое. Хотя сами программы, скомпилированные им работают на моем компьютере без сбоев.
Завтра попробую на другом компьютере, может просто пора переустановить билдер или систему...
0
5 / 5 / 2
Регистрация: 02.01.2011
Сообщений: 64
08.02.2011, 10:29
Почему у меня вот такие ошибки?
[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
 Аватар для Duke_Garland
2 / 2 / 0
Регистрация: 01.02.2011
Сообщений: 18
08.02.2011, 19:10
CaHeK_Gop, В у себя в настройках проекта в разделе дерикториес и кондишионс _Tchat to maps поменяйте на второй вариант и тогда эту ошибку выдавать небудет.
1
0 / 0 / 0
Регистрация: 19.03.2011
Сообщений: 3
19.03.2011, 19:49
Всем привет! Сначало хочется выразить слова благодарности автору темы и Форумчанину 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
2621 / 1632 / 266
Регистрация: 19.02.2010
Сообщений: 4,330
20.03.2011, 22:05
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
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Одновременно с первой - никак
Доброго времени суток!
Уточните пожалуйста при каком подключении возможно использование 2х и более камер программой.
Есть всевозможные дополнения наподобие VideoLab, которые подключают 2 и более камер.
Честно использовать данные плаги не хочу, есть желание разобраться в вопросе без использования сторонних средств. Если есть информация поделитесь, так же приму в дар литературу, которую можно почитать по данному поводу.
За ранее благодарен.
0
шарпопочитатель
 Аватар для ht1515
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
21.03.2011, 20:23
используйте openCv
0
0 / 0 / 0
Регистрация: 19.03.2011
Сообщений: 3
22.03.2011, 06:19
Цитата Сообщение от ht1515 Посмотреть сообщение
используйте openCv
Наверное я полный нуб в этом вопросе, кто может помочь найти рабочую версию openCv?
Ссылки которые находил в сети либо битые, либо просят регистрационные ключи.
Хотя слышал что openCv должен быть в разряде FreeWare.
Поделитесь.

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

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

битые?
0
Фрилансер
49 / 34 / 7
Регистрация: 12.01.2010
Сообщений: 186
Записей в блоге: 1
22.03.2011, 11:31
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
 Аватар для Duke_Garland
2 / 2 / 0
Регистрация: 01.02.2011
Сообщений: 18
24.03.2011, 21:51
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
а нельзя ли с помощью Оpen CV вывести видео с камеры не в отдельном окне а на форму(в пикчебокс)?
и если можно то как?
0
Фрилансер
49 / 34 / 7
Регистрация: 12.01.2010
Сообщений: 186
Записей в блоге: 1
25.03.2011, 23:59
Цитата Сообщение от 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
Спасибо!!
попробую переписать код на Visuall C++ поскольку я пишу на нем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2011, 11:35
Помогаю со студенческими работами здесь

Снимок с веб-камеры
нашел такой пример, который выводит на окно видео в режиме онлайн с вэб камеры http://pastebin.com/c9LCaLRT (из за ограничения...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru