roboforum.ru

Технический форум по робототехнике.


Как обработать видео.

Учиться можно на своих ошибках, но учиться на чужих — быстрее и дешевле ;)

Re: Как обработать видео.

Сообщение Angel71 » 08 фев 2010, 04:57

flyroman, да дело не в том, что vlc в принципе не подходит. как вариант вполне можно использовать. вот смотри, ты пробовал получать цвет пикселей, но реально на всём канвасе у тебя всё было залито одним цветом. а эт значит только одно - оверлей и до самого изображения всякими getpixel ну никак не доберёшся. для этого тебе нужно будет писать "фильтр". а там не всё так просто и легко, смысл в это всё лезть? эт первое и основное.
второе. вообще по нормальному нельзя работать с данными, получаемых попиксельно из канваса. каждый вызов getpixel или чего-то аналогичного это оооооооооооооооочень много лишних телодвижений, начиная с того, что это уже вызов функции, заканчивая тем, что эта функция сама по себе делает много ненужных телодвижений.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Как обработать видео.

Сообщение MiBBiM » 08 фев 2010, 08:19

второй заход:
viewtopic.php?f=51&t=6860 - Emgu CV - opencv на vb с помощью .net
туторы:
viewtopic.php?f=51&t=6395#p113373, viewtopic.php?f=51&t=6395&start=30#p146462
граб видео через opencv:
Код: Выделить всёРазвернуть
/*
* Программа захватывает видео с камеры
* Для выхода используется клавиша e
*/
#include <highgui.h>
#include <stdio.h>

int main()
{
   // создаем окошко для манипуляций
   const char *window = "Тестовое окно";   
   cvNamedWindow(window);

   // буфер-кадр
   IplImage *img;
   // создаем поток для видео
   CvCapture *camera = cvCreateCameraCapture(CV_CAP_ANY);

   do {
      img = cvQueryFrame(camera);
      cvShowImage(window, img);
   } while (cvWaitKey(33) != 'e');

   cvDestroyAllWindows();
}

готовый кадр захватывается одной функцией и ничего придумывать не надо. да, opencv прекрасно работает с тюнерами.
если так хочется делать захват через сторонние либы - пожалуйста, но только никак не getpixel'om, а получением указателя(1) на сграбленное изображение.
после чего нужно создать хидер для изображения и натравить указатель данных из структуры на указатель (1). три строчки
Код: Выделить всёРазвернуть
char *ptr;   // указатель на начало сграбленного изображения
IplImage *frame = cvCreateImage(cvSize(640, 480),IPL_DEPTH_8U, 3);   // хидер
frame->imageData = ptr;   // привязали данные


Добавлено спустя 1 минуту 10 секунд:
если в библиотеке захвата изображение хранится не попиксельно, то нужно будет создать CvMat и произвести нужные преобразования.
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

Re: Как обработать видео.

Сообщение flyroman » 08 фев 2010, 17:09

Так, от VLC я отказался, в силу того что нашел код нормального приема с видеоустройств.
код как раз для VB.

1. Принимает очень быстро картинка не тормозит.
2. Можно считать пиксели.
«Это невозможно» — сказала Причина. «Это безрассудно!» — заметил Опыт. «Это бесполезно!» — отрезала Гордость.
«Попробуй» — шепнула Мечта…
Аватара пользователя
flyroman
 
Сообщения: 1266
Зарегистрирован: 12 янв 2009, 21:39
Откуда: Чебоксары, Чувашская Республика
Skype: roman.buhalov
прог. языки: Basic, VisualBasic,Pascal, Delphi, ASM
ФИО: Роман Сергеевич

Re: Как обработать видео.

Сообщение Angel71 » 08 фев 2010, 17:51

именно код или какая-то библиотека с примерами кода? :oops: делись, может кому тоже згодится
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Как обработать видео.

Сообщение Michael_K » 08 фев 2010, 18:25

ссылочку хотя бы?
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Как обработать видео.

Сообщение flyroman » 08 фев 2010, 19:28

Захват видео с устройств.
Код для Visual Basic 6.0
Используется библиотека avicap32.dll

Мне ненравится то, что картинка сохраняется в файл, а потом открывается (работа с винчестером всегда затормаживает работу программы) хочу сделать чтобы в буфер кидала изображение.

Код: Выделить всёРазвернуть
Option Explicit

Const WM_USER = 1024
Const WM_CAP_DRIVER_CONNECT = WM_USER + 10
Const WM_CAP_SET_PREVIEW = WM_USER + 50
Const WM_CAP_SET_PREVIEWRATE = WM_USER + 52
Const WM_CAP_DRIVER_DISCONNECT = WM_USER + 11
Const WM_CAP_GRAB_FRAME = WM_USER + 60
Const WM_CAP_FILE_SAVEDIB = WM_USER + 25

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal HWND As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SendMessageString Lib "user32" Alias "SendMessageA" (ByVal HWND As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal a As String, ByVal b As Long, ByVal c As Integer, ByVal d As Integer, ByVal e As Integer, ByVal f As Integer, ByVal g As Long, ByVal h As Integer) As Long
Private Declare Function capGetDriverDescription Lib "avicap32" Alias "capGetDriverDescriptionA" (ByVal wDriverIndex As Long, ByVal lpszName As String, ByVal cbName As Long, ByVal lpszVer As String, ByVal cbVer As Long) As Long

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Dim hWDC As Long
Dim STARTcap As Boolean
Dim i, j, k, i2, j2 As Integer
Dim c, f, h As Long

Private Sub Command1_Click()
hWDC = capCreateCaptureWindow("VideoCapture", 0, 0, 0, 320, 240, Picture1.HWND, 0)
  If (hWDC <> 0) Then
    SendMessage hWDC, WM_CAP_DRIVER_CONNECT, 0, 0
     STARTcap = True
     Timer1.Enabled = True
   Else
    MsgBox ("no cam found")
  End If
End Sub


Private Sub Command2_Click()
If STARTcap = True Then
Call SendMessage(hWDC, WM_CAP_DRIVER_DISCONNECT, 0, 0)
STARTcap = False
End If
End Sub

Private Sub Form_Terminate()
f = 10000
i2 = 0
j2 = 0
Picture1.ScaleMode = vbPixels
Timer1.Enabled = False
If STARTcap = True Then
Call SendMessage(hWDC, WM_CAP_DRIVER_DISCONNECT, 0, 0)
STARTcap = False
End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
Timer1.Enabled = False
If STARTcap = True Then
Call SendMessage(hWDC, WM_CAP_DRIVER_DISCONNECT, 0, 0)
STARTcap = False
End If
End Sub

Private Sub Timer1_Timer()
On Error GoTo 1
    SendMessage hWDC, WM_CAP_GRAB_FRAME, 0, 0
    SendMessageString hWDC, WM_CAP_FILE_SAVEDIB, 0, App.Path & "\VIDEO1.BMP"
    Picture1.Picture = LoadPicture(App.Path & "\VIDEO1.BMP")

    DoEvents
1:
End Sub
«Это невозможно» — сказала Причина. «Это безрассудно!» — заметил Опыт. «Это бесполезно!» — отрезала Гордость.
«Попробуй» — шепнула Мечта…
Аватара пользователя
flyroman
 
Сообщения: 1266
Зарегистрирован: 12 янв 2009, 21:39
Откуда: Чебоксары, Чувашская Республика
Skype: roman.buhalov
прог. языки: Basic, VisualBasic,Pascal, Delphi, ASM
ФИО: Роман Сергеевич

Re: Как обработать видео.

Сообщение Michael_K » 08 фев 2010, 19:58

Можно рам-диск юзать :)))

Добавлено спустя 12 минут 30 секунд:
http://bit.pirit.info/forum/viewtopic.php?t=7436&highlight=
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Как обработать видео.

Сообщение flyroman » 08 фев 2010, 22:17

Michael_K, отдуши спасибо за ссылку!
«Это невозможно» — сказала Причина. «Это безрассудно!» — заметил Опыт. «Это бесполезно!» — отрезала Гордость.
«Попробуй» — шепнула Мечта…
Аватара пользователя
flyroman
 
Сообщения: 1266
Зарегистрирован: 12 янв 2009, 21:39
Откуда: Чебоксары, Чувашская Республика
Skype: roman.buhalov
прог. языки: Basic, VisualBasic,Pascal, Delphi, ASM
ФИО: Роман Сергеевич

Пред.

Вернуться в Осторожно — грабли ;)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4