24 / 24 / 2
Регистрация: 22.11.2011
Сообщений: 290
1

Захват видео с камеры

07.06.2012, 00:19. Показов 6534. Ответов 9
Метки нет (Все метки)

Здравствуйте в общем мне не обходимо захватить картинку с веб камеры и передавать по интернету но для начала необходимо перевести каждый кадр в массив байт передать по инету и так бесконечно

Вот код не мой и мои попытки перевода в массив байт:
VB.NET
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
Imports System
Imports System.IO
Imports System.Runtime.InteropServices
Imports Microsoft.Win32
 
Public Class Form1
    Inherits System.Windows.Forms.Form
 
    Dim counter As Integer
    Dim pbCtrl As PictureBox
 
    Const WM_CAP_START = &H400S
    Const WS_CHILD = &H40000000
    Const WS_VISIBLE = &H10000000
    Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10
    Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11
    Const WM_CAP_EDIT_COPY = WM_CAP_START + 30
    Const WM_CAP_SEQUENCE = WM_CAP_START + 62
    Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23
    Const WM_CAP_SET_SCALE = WM_CAP_START + 53
    Const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52
    Const WM_CAP_SET_PREVIEW = WM_CAP_START + 50
    Const SWP_NOMOVE = &H2S
    Const SWP_NOSIZE = 1
    Const SWP_NOZORDER = &H4S
    Const HWND_BOTTOM = 1
    '--The capGetDriverDescription function retrieves the version 
    ' description of the capture driver--
    Declare Function capGetDriverDescriptionA Lib "avicap32.dll" _
    (ByVal wDriverIndex As Short, _
    ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, ByVal cbVer As Integer) As Boolean
 
    '--The capCreateCaptureWindow function creates a capture window--
    Declare Function capCreateCaptureWindowA Lib "avicap32.dll" (ByVal lpszWindowName As String, ByVal dwStyle As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Short, ByVal hWnd As Integer, ByVal nID As Integer) As Integer
 
    '--This function sends the specified message to a window or windows--
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, <MarshalAs(UnmanagedType.AsAny)> ByVal lParam As Object) As Integer
 
    '--Sets the position of the window relative to the screen buffer--
    Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Integer, ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer
 
    '--This function destroys the specified window--
    Declare Function DestroyWindow Lib "user32" (ByVal hndw As Integer) As Boolean
 
    '---used to identify the video source---
    Dim CamSource As Integer
 
    '---used as a window handle---
    Dim hWnd As Integer
 
    Private Sub cameraSource()
        Dim DriverName As String = Space(80)
        Dim DriverVersion As String = Space(80)
        For i As Integer = 0 To 9
            If capGetDriverDescriptionA(i, DriverName, 80, DriverVersion, 80) Then
                ListBox1.Items.Add(DriverName.Trim)
            End If
        Next
    End Sub
 
    Private Sub previewCamera(ByVal pbCtrl As PictureBox)
 
        hWnd = capCreateCaptureWindowA(CamSource, WS_VISIBLE Or WS_CHILD, 0, 0, 0, 0, pbCtrl.Handle.ToInt32, 0)
        If SendMessage(hWnd, WM_CAP_DRIVER_CONNECT, CamSource, 0) Then
            '---set the preview scale---
            SendMessage(hWnd, WM_CAP_SET_SCALE, True, 0)
            '---set the preview rate (ms)---
            SendMessage(hWnd, WM_CAP_SET_PREVIEWRATE, 30, 0)
            '---start previewing the image---
            SendMessage(hWnd, WM_CAP_SET_PREVIEW, True, 0)
            '---resize window to fit in PictureBox control---
            SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, _
            640, 480, _
            SWP_NOMOVE Or SWP_NOZORDER)
        Else
            '--error connecting to video source---
            DestroyWindow(hWnd)
        End If
    End Sub
 
    Private Sub stopPreviewCamera()
        SendMessage(hWnd, WM_CAP_DRIVER_DISCONNECT, CamSource, 0)
        DestroyWindow(hWnd)
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        cameraSource()
        Button4.Enabled = False
        Button1.Enabled = False
        Button2.Enabled = False
        Button3.Enabled = False
    End Sub
 
    Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
        Label1.Visible = False
        previewCamera(PictureBox1)
        Button1.Enabled = True
        Button4.Enabled = False
        Button2.Enabled = True
    End Sub
 
    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        CamSource = ListBox1.SelectedIndex
        '---preview the selected video source
    End Sub
 
    'stop preview
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        stopPreviewCamera()
        Button4.Enabled = True
        Button1.Enabled = False
    End Sub
 
    ' recording
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Button3.Enabled = True
        Button2.Enabled = False
        SendMessage(hWnd, WM_CAP_SEQUENCE, 0, 0)
    End Sub
 
    ' stop recording and ask to save video
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim save As Integer
        save = MsgBox("Do you want to save your recording video", MsgBoxStyle.YesNo + MsgBoxStyle.Information, "Recording Video")
        If (save = MsgBoxResult.Yes) Then
            Dim saveName As New SaveFileDialog
            saveName.Filter = "Avi file(*.avi)|*.avi"
            If saveName.ShowDialog = Windows.Forms.DialogResult.OK Then
                ' SendMessage(hWnd, WM_CAP_FILE_SAVEAS, 0, "C:\RecordedVideo.avi")
                SendMessage(hWnd, WM_CAP_FILE_SAVEAS, 0, saveName.FileName)
            End If
        End If
        Me.Cursor = System.Windows.Forms.Cursors.Default
        Button2.Enabled = True
        Button3.Enabled = False
    End Sub
 
    ' preview
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        CamSource = ListBox1.SelectedIndex
        previewCamera(PictureBox1)
        Button4.Enabled = False
        Button1.Enabled = True
    End Sub
 
    Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
        Timer1.Enabled = True
    End Sub
 
    Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click
        Timer1.Enabled = False
    End Sub
 
    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        counter = 0
        Dim bytesImg() As Byte = ImageToByte(PictureBox1.Image)
        For i As Integer = 0 To bytesImg.Count() - 1
            FileIO.FileSystem.WriteAllText("G:\testFolder\img#_" & counter & ".jpeg", bytesImg(i), False)
            counter = counter + 1
        Next i
    End Sub
 
    Public Shared Function ImageToByte(ByVal img As Image) As Byte()
        Dim imgStream As MemoryStream = New MemoryStream()
 
        img.Save(imgStream, System.Drawing.Imaging.ImageFormat.Png)
 
        imgStream.Close()
        Dim byteArray As Byte() = imgStream.ToArray()
        imgStream.Dispose()
 
        Return byteArray
    End Function
 
End Class
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2012, 00:19
Ответы с готовыми решениями:

Как получить видео с камеры
У кого получилось получить видео с камеры? Желательно примерчик если есть и мануалы!

Захват видео с камеры
кТО МОЖЕТ ПОДСКАЗАТЬ - КАК СКИНУТЬ ВИДЕО С КАМЕРЫ Samsung VP-W71 Hi 8, 0.32 Mpix, 22x / 880x В...

Захват видео с IP камеры
Доброго времени суток! Начальство захотело сделать в помещении запись видео и аудио для каких то...

Захват видео с камеры
Как захватить видео с камери? Использовал DirectShow, но компилятор (работаю на Dev C++) не видит...

9
32 / 32 / 3
Регистрация: 20.07.2011
Сообщений: 407
07.06.2012, 11:11 2
Сохранить из вебкамеры изображение в .jpg
0
Заблокирован
07.06.2012, 11:28 3
Возможно на VB.NET захватывать видео с экрана?
0
24 / 24 / 2
Регистрация: 22.11.2011
Сообщений: 290
07.06.2012, 15:38  [ТС] 4
Цитата Сообщение от Release Посмотреть сообщение
Возможно на VB.NET захватывать видео с экрана?
наверно программно нажимать кнопку Prt Scrn потом из буфера брать картинку и использовать дальше как вам надо

Добавлено через 8 минут
abbat81, у вас код по ссылке на другую тему точно такой же как у меня. Так как мне передавать картинку или видео сразу, с вебки брать переводить в массив байт и передавать в кому-то байты по интернету которые будут уже переводится в картинку у кого-то(пытаюсь сделать что-то типа видео связи как в скайп)

А про передачу на ftp у вас нечего не было в том примере
0
Заблокирован
07.06.2012, 16:05 5
Так быстро не получиться получать картинку из БО. Выдает ошибку не задана ссылка
0
638 / 592 / 90
Регистрация: 19.03.2012
Сообщений: 1,125
07.06.2012, 16:34 6
Цитата Сообщение от Release Посмотреть сообщение
Возможно на VB.NET захватывать видео с экрана?
Где-то видел пример - аналог фрапса - создание скринов и вывод их по порядку в отдельной форме. Весьма похоже на видео, но не полноценно.
0
24 / 24 / 2
Регистрация: 22.11.2011
Сообщений: 290
07.06.2012, 23:34  [ТС] 7
Люди давайте не отходить от темы веб камеры..

Добавлено через 6 часов 5 минут
Что ни кто не знает как взять картинку с вебки и перевести в массив байт?
0
10218 / 6598 / 495
Регистрация: 28.12.2010
Сообщений: 21,161
Записей в блоге: 1
08.06.2012, 06:33 8
...а что, TC пользоваться поиском совсем не умеет?

Delphi
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
var 
  buf   : array [0..640 * 480 * 3] of Byte; // изображение
 
function FrameCallback(hWnd: HWND; lpVHdr: PVIDEOHDR): DWORD; stdcall;
type
  TByteArray = array [0..1] of Byte;
  PByteArray = ^TByteArray;
var
  i, j   : Integer;
  sum    : Single;
  status : TCapStatus;
  str    : string;
  //
  tx, ty, ts, tb: tstrings;
begin
  Result := 0;
  try
 
 
  // информация о изображении
  SendMessage(h_cam, WM_CAP_GET_STATUS, SizeOf(status), Integer(@status));
  // получаем изображение
  Move(lpVHdr^.lpData^, buf, lpVhdr^.dwBytesUsed);
 
 
...
 
 
// обработчик сообщений главного окна
function WndProc(hwnd: DWORD; message: UINT; wParam: Longint; lParam: LongInt): LongInt; stdcall;
begin
 case message of
  // получаем кадр по таймеру (25 раз в секунду)
  WM_TIMER:
   begin
    // граб кадра-
    SendMessage(h_cam, WM_CAP_GRAB_FRAME, 0, 0);
на WinAPI, синтаксис чуть поменять труда вам не составит.
1
24 / 24 / 2
Регистрация: 22.11.2011
Сообщений: 290
08.06.2012, 16:01  [ТС] 9
raxp, а как сохранить на "грабленое"
Цитата Сообщение от raxp Посмотреть сообщение
SendMessage(h_cam, WM_CAP_GRAB_FRAME, 0, 0);
0
7 / 7 / 0
Регистрация: 31.01.2012
Сообщений: 219
08.06.2012, 19:59 10
получал изоброжение с веб камеры как указано в выше предложенной сылке

Цитата Сообщение от abbat81 Посмотреть сообщение
Сохранить из вебкамеры изображение в .jpg
там ругается на
VB.NET
1
If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then
вот полностью код
VB.NET
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
Public Class Form1
    Const WM_CAP As Short = &H400S
    Const WM_CAP_DRIVER_CONNECT As Integer = WM_CAP + 10
    Const WM_CAP_DRIVER_DISCONNECT As Integer = WM_CAP + 11
    Const WM_CAP_EDIT_COPY As Integer = WM_CAP + 30
    Const WM_CAP_SET_PREVIEW As Integer = WM_CAP + 50
    Const WM_CAP_SET_PREVIEWRATE As Integer = WM_CAP + 52
    Const WM_CAP_SET_SCALE As Integer = WM_CAP + 53
    Const WS_CHILD As Integer = &H40000000
    Const WS_VISIBLE As Integer = &H10000000
    Const SWP_NOMOVE As Short = &H2S
    Const SWP_NOSIZE As Short = 1
    Const SWP_NOZORDER As Short = &H4S
    Const HWND_BOTTOM As Short = 1
    Dim iDevice As Integer = 0
    Dim hHwnd As Integer
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Object) As Integer
    Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Integer, ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer
    Declare Function DestroyWindow Lib "user32" (ByVal hndw As Integer) As Boolean
    Declare Function capCreateCaptureWindowA Lib "avicap32.dll" (ByVal lpszWindowName As String, ByVal dwStyle As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Short, ByVal hWndParent As Integer, ByVal nID As Integer) As Integer
    Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Short, ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, ByVal cbVer As Integer) As Boolean
 
    Private Sub LoadDeviceList()
        Dim strName As String = Space(100)
        Dim strVer As String = Space(100)
        Dim bReturn As Boolean
        Dim x As Integer = 0
        Do
            bReturn = capGetDriverDescriptionA(x, strName, 100, strVer, 100)
            If bReturn Then lstDevices.Items.Add(strName.Trim)
            x += 1
        Loop Until bReturn = False
    End Sub
 
    Private Sub OpenPreviewWindow()
        Dim iHeight As Integer = picCapture.Height
        Dim iWidth As Integer = picCapture.Width
        hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 640, 480, picCapture.Handle.ToInt32, 0)
        If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then
            SendMessage(hHwnd, WM_CAP_SET_SCALE, True, 0)
            SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0)
            SendMessage(hHwnd, WM_CAP_SET_PREVIEW, True, 0)
            SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, picCapture.Width, picCapture.Height, SWP_NOMOVE Or SWP_NOZORDER)
            btnSave.Enabled = True
            btnStop.Enabled = True
            btnStart.Enabled = False
        Else
            DestroyWindow(hHwnd)
            btnSave.Enabled = False
        End If
    End Sub
 
    Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
        Dim data As IDataObject
        Dim bmap As Image
        SendMessage(hHwnd, WM_CAP_EDIT_COPY, 0, 0)
        data = Clipboard.GetDataObject()
        If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
            bmap = CType(data.GetData(GetType(System.Drawing.Bitmap)), Image)
            picCapture.Image = bmap
            ClosePreviewWindow()
            btnSave.Enabled = False
            btnStop.Enabled = False
            btnStart.Enabled = True
            If sfdImage.ShowDialog = DialogResult.OK Then
                bmap.Save(sfdImage.FileName, Imaging.ImageFormat.Bmp)
            End If
        End If
    End Sub
 
    Private Sub ClosePreviewWindow()
        SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0)
        DestroyWindow(hHwnd)
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        LoadDeviceList()
    End Sub
 
    Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
        OpenPreviewWindow()
        btnStart.Enabled = False
        btnStop.Enabled = True
    End Sub
 
    Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
        ClosePreviewWindow()
        btnStart.Enabled = True
        btnStop.Enabled = False
    End Sub
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2012, 19:59

ЗАХВАТ ВИДЕО с камеры miniDV
Друзья, кто знает, как захватить видео с камеры miniDV в iMAC. Раньше был мак бук про и вопросов...

Захват видео с web-камеры
Добрый день! Передо мной стоит следующая задача. Организовать Preview с web-камеры. Вот ветка в...

Захват видео с IP Web камеры
Здравствуйте, мастера. Помогите разобраться с вопросом видеозахвата с IP Web камеры. Хотелось бы,...

Захват видео с камеры. OpenCV
Добрый вечер, форумчане. Возникла проблема с захватом видео. Применяю библиотеку openCV 2.1. С...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.