[РЕШЕНО] Windows 10 и захват кадра из видеопотока с камеры

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Windows 10 и захват кадра из видеопотока с камеры ....

Сообщение Alex2013 » 11.05.2017 19:36:15

zub писал(а):>>Посмотри как у меня сделано ...
В исходнике туда передается nil. ты передаешь какойто указатель на чтото. я надеюсь там где (...) ты заполняешь ff1, если нет, то и неработает оно у тебя потому что получает на входе мусор!
Единственный способ передать туда nil это его разименовать - ТНужныйТип(nil^) или PТНужныйТип(nil)^ что в данном случае однотрибукственно. Естественно процедура принимающая такой параметр должна быть к этому готова. судя по делфи коду .Next к этому готов.
Никаких проблем в данном случае с подобной конструкцией быть не должно


Посмотри в код Next -а ... там все видно даже по объявлению ...Next( ... ; OUT ...; OUT ...)... Out как я понял работает ТОЛЬКО на ВЫХОД ... то есть важно чтобы переменная БЫЛА а что в ней до вызова Next неважно . Фокус с Nil чисто "дельфийский прикол" .
Последний раз редактировалось Alex2013 11.05.2017 19:43:56, всего редактировалось 4 раз(а).
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Windows 10 и захват кадра из видеопотока с камеры ....

Сообщение zub » 11.05.2017 19:39:16

посмотри в мсдн, в данном случае это первоисточник. третий параметр должен быть указателем, ну или var на худой конец , но тогда от передачи nil^ никто ужасаться недолжен (This parameter can be NULL if celt is 1.)
https://msdn.microsoft.com/ru-ru/librar ... 77(v=vs.85).aspx

Добавлено спустя 5 минут 26 секунд:
>>This parameter can be NULL if celt is 1.
ты туда еденичку вбил или таки передал мусор?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Windows 10 и захват кадра из видеопотока с камеры ....

Сообщение Alex2013 » 11.05.2017 19:50:35

zub писал(а):посмотри в мсдн, в данном случае это первоисточник. третий параметр должен быть указателем, ну или var на худой конец , но тогда от передачи nil^ никто ужасаться недолжен (This parameter can be NULL if celt is 1.)
https://msdn.microsoft.com/ru-ru/librar ... 77(v=vs.85).aspx

Добавлено спустя 5 минут 26 секунд:
>>This parameter can be NULL if celt is 1.
ты туда еденичку вбил или таки передал мусор?


"Не удалось найти запрошенную страницу." :idea: но причем тут сама процедура если объявление Out ? По идее на входе ВСЕГДА НИЛ ...
А вот на ВЫХОДЕ что ?
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Windows 10 и захват кадра из видеопотока с камеры ....

Сообщение zub » 11.05.2017 19:53:44

нда.... ты даже прямой ссылкой воспользоваться неможешь?
Мне тебе объяснять что некоторые форумные движки портят ссылки и вместо тыкать мышкой приходится копировать и вставлять ссылку в адресную строку?

Добавлено спустя 2 минуты 20 секунд:
ну погугли чтоли IEnumMoniker Интерфейс - MSDN - Microsoft
и там ткни в метод next
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Windows 10 и захват кадра из видеопотока с камеры ....

Сообщение Alex2013 » 11.05.2017 20:01:44

zub писал(а):нда.... ты даже прямой ссылкой воспользоваться неможешь?
Мне тебе объяснять что некоторые форумные движки портят ссылки и вместо тыкать мышкой приходится копировать и вставлять ссылку в адресную строку?

Добавлено спустя 2 минуты 20 секунд:
ну погугли чтоли IEnumMoniker Интерфейс - MSDN - Microsoft
и там ткни в метод next

Оно ?
https://msdn.microsoft.com/ru-ru/librar ... t(v=vs.110).aspx
Последний раз редактировалось Alex2013 11.05.2017 20:06:30, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Windows 10 и захват кадра из видеопотока с камеры ....

Сообщение zub » 11.05.2017 20:05:00

https://msdn.microsoft.com/ru-ru/library/windows/desktop/dd542677(v=vs.85).aspx

Добавлено спустя 5 минут 31 секунду:
Твоя ссылка про .net вариант
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Windows 10 и захват кадра из видеопотока с камеры ....

Сообщение Alex2013 » 11.05.2017 20:13:26

Вроде понятно ...
Но мне больше интересно что там с их "сиятельствами " графами в вин 10 ...
Код: Выделить всё
//если необходимые для работы устройства найдены,
        //то вызываем процедуру построения графа фильтров
        if FAILED(CreateGraph) then
            Begin
              ShowMessage('Внимание! Произошла ошибка при построении графа фильтров');
              Exit;
            End;

Камеры в списке есть ... но они ничего не показывают ...

Зы
Ладно спасибо за внимание .. пойду собирать другие примеры (в экзешнике из под делфи в части примеров все работало и в Win-10 )
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Windows 10 и захват кадра из видеопотока с камеры ....

Сообщение zub » 11.05.2017 20:46:50

отладчик в руки и вперед, что где внутри CreateGraph пошло не так
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Windows 10 и захват кадра из видеопотока с камеры ....

Сообщение Alex2013 » 12.05.2017 02:00:40

Вот этот пример работает !
Laz_kamera_pol_izobr.7z
Зы
А что в первом не так с Вин-10 так до сих пор и не понял ... :roll:

Добавлено спустя 12 часов 13 минут 20 секунд:
Re: [РЕШЕНО] Windows 10 и захват кадра из видеопотока с камеры
Добавил [РЕШЕНО] в название темы ...
Но как дойдут руки до продолжения проекта обещаю поделится очередным "виртуальным телескопом" :idea:
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: [РЕШЕНО] Windows 10 и захват кадра из видеопотока с кам

Сообщение Alex2013 » 23.05.2017 18:33:56

Вот как обещал "продукт борьбы с вагонной скукой " (Да Лазарус наконец поселился и на моем планшете )
Задумка сделать "цифровую подзорную трубу " ( в дальнейшем с разными наворотами ) начинает воплощается в реальный программный код . :idea:

ИзображениеИзображение

:arrow: Truba_DS_0_001.7z

Отличий от исходного примера мало но для написанной на ходу в вагоне поезда поделки сойдет ...
Уравнение увеличением как с клавиатуры + - * так и кнопками на панелей окна .

Зы
Планы как обычно "наполеоновские" однако это явно проект не первой важности так что развитие его будет скорее всего совсем не быстрым .
Последний раз редактировалось Alex2013 03.03.2021 16:47:16, всего редактировалось 2 раз(а).
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: [РЕШЕНО] Windows 10 и захват кадра из видеопотока с кам

Сообщение Alex2013 » 18.07.2017 10:40:43

Итак добрался я и до этого проекта и малость усовершенствовал .

ИзображениеИзображение
(Скрин чуть отредактирован (в Wine понятное дело камера не доступна, а в винду перезагружаться лень ))

:arrow: Truba_DS_0_003.7z (Программа + исходники ) :idea:

Датчик движения (с довольно интересным визуальным эффектом из серии "сам не ожидал" ) в первом приближении тоже работает !

+ Может кому пригодится эти две процедуры
Первая FastBW "Быстрое обесцвечивание"
и вторая FastBWComp "Оригинальное сравнение " двух кадров для датчика движения .
( лучше пока не придумал )

Код: Выделить всё
Procedure FastBW(Var Bitmap: TBitmap);
Type
RGB1=Record  R,G,B  : byte; end;
var
  X, Y: Integer;
  PixelPtr: PInteger;
  PixelRowPtr: PInteger;
BytePerPixel: Integer;
BW:Byte;
PRGB:^RGB1;
  begin
  try
    Bitmap.BeginUpdate(False);
    PixelRowPtr := PInteger(Bitmap.RawImage.Data);
    BytePerPixel := Bitmap.RawImage.Description.BitsPerPixel div 8;
    for Y := 0 to Bitmap.Height - 1 do begin
      PixelPtr := PixelRowPtr;
      for X := 0 to Bitmap.Width - 1 do begin
       PRGB:=Pointer(PixelPtr);
       With PRGB^ do begin  BW:=(R+g+b) Div 3;
                     R:=BW;G:=BW;B:=BW;
                     end;
        Inc(PByte(PixelPtr), BytePerPixel);
      end;
      Inc(PByte(PixelRowPtr),Bitmap.RawImage.Description.BytesPerLine);
    end;
  finally
    Bitmap.EndUpdate(False);
  end;
end;

Procedure FastBWComp(C:Byte;Var Bitmap,B: TBitmap);
Type
RGB1=Record  R,G,B  : byte; end;
var
  X, Y: Integer;
  PixelPtr,PixelPtr2: PInteger;
  PixelRowPtr,PixelRowPtr2: PInteger;
BytePerPixel: Integer;
BW:Byte;
PRGB,PRGB2:^RGB1;
  begin
  try
    Bitmap.BeginUpdate(False);
    PixelRowPtr := PInteger(Bitmap.RawImage.Data);
    PixelRowPtr2 := PInteger(B.RawImage.Data);
    BytePerPixel := Bitmap.RawImage.Description.BitsPerPixel div 8;
    for Y := 0 to Bitmap.Height - 1 do begin
      PixelPtr := PixelRowPtr;
      PixelPtr2 := PixelRowPtr2;
      for X := 0 to Bitmap.Width - 1 do begin
       PRGB:=Pointer(PixelPtr); PRGB2:=Pointer(PixelPtr2);

      If (PRGB^.R = PRGB^.G) and (Abs(PRGB^.R - PRGB2^.R) >c) then
       With PRGB^ do begin
                     R:=0;B:=0;
                     end else
                     begin
                      PRGB^.R:=PRGB2^.G;
                      PRGB^.B:=PRGB2^.G;
                      end ;

        Inc(PByte(PixelPtr), BytePerPixel);
        Inc(PByte(PixelPtr2), BytePerPixel);
      end;
      Inc(PByte(PixelRowPtr),Bitmap.RawImage.Description.BytesPerLine);
      Inc(PByte(PixelRowPtr2),Bitmap.RawImage.Description.BytesPerLine);

    end;
  finally
    Bitmap.EndUpdate(False);
  end;
end;



Зы
Интересно сделать выделение движения не цветом а рамкой ...
Может кто посоветует как это можно сделать ?
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: [РЕШЕНО] Windows 10 и захват кадра из видеопотока с кам

Сообщение olegy123 » 18.07.2017 13:20:12

Alex2013 писал(а):( лучше пока не придумал )

Вообще то лучше использовать MMX,SSE,AVX. Они для этого создавались.

Alex2013 писал(а):Интересно сделать выделение движения не цветом а рамкой ...
Может кто посоветует как это можно сделать ?
Находишь крайние точки, это будет контур.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: [РЕШЕНО] Windows 10 и захват кадра из видеопотока с кам

Сообщение Alex2013 » 18.07.2017 14:59:17

olegy123 писал(а):
Alex2013 писал(а):( лучше пока не придумал )

Вообще то лучше использовать MMX,SSE,AVX. Они для этого создавались.
Разумеется лучше, но скорости даже так пока хватает ... Заметь я исходную картинку обрабатываю ( 640х480х24 ) .
Причем пока не объединил в одну процедуру и кручу цикл несколько раз но тромозов, что характерно нет .
Меня больше легкое нерегулярное мерцание при копировании в "уменьшитель" беспокоит.
Alex2013 писал(а):Интересно сделать выделение движения не цветом а рамкой ...
Может кто посоветует как это можно сделать ?
Находишь крайние точки, это будет контур.

Ну по идее все так, но хорошо бы отслеживать еще и вектор и объединять близкие объекты движущиеся в одном направлении.
(Что по моему в это случае так просто не выйдет ... :wink: )

Добавлено спустя 23 часа 37 минут 59 секунд:
Re: [РЕШЕНО] Windows 10 и захват кадра из видеопотока с камеры
Продолжение банкета ... :wink:
(На этот раз нормальный скрин )
ИзображениеИзображение
:arrow: Truba_DS_0_004.7z
Воспользовался советом ...
Рамка работает но только для одного изменяющегося движущегося объекта .
Между делом научился лихо вытягивать "спец эффекты" из модуля FX_Kol.pas .

Зы
Кстати как разобраться с "зеркальностью" отображения ? На этом скрине нормально но вчера камеру почему-то "выворачивало наизнанку"...
(В датчике движения сделал "ручной поворот" но в "оверлейном" выводе в прямо с камеры такой фокус не пойдет )
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: [РЕШЕНО] Windows 10 и захват кадра из видеопотока с кам

Сообщение Alex2013 » 21.07.2017 01:39:52

Пятая сборка "подзорной трубы".
:arrow: Truba_DS_0_005.7z
Добавил некий прообраз будущей системы слежения с галереей отслеженных кадров ... :idea:
+ подложил под основную панель скрол бокс ...

...и опять забыл скриншот щелкнуть ... :idea:
Ладно пусть пока такой побудет ...(Из под Wine "как есть" )
ИзображениеИзображение

...
Но так все-же лучше...

ИзображениеИзображение
Последний раз редактировалось Alex2013 21.07.2017 11:05:52, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: [РЕШЕНО] Windows 10 и захват кадра из видеопотока с кам

Сообщение olegy123 » 21.07.2017 07:54:28

Почему Wine?

Добавлено спустя 9 минут 47 секунд:
Re: [РЕШЕНО] Windows 10 и захват кадра из видеопотока с камеры
Alex2013 писал(а):+ Может кому пригодится эти две процедуры
Первая FastBW "Быстрое обесцвечивание"
и вторая FastBWComp "Оригинальное сравнение " двух кадров для датчика движения .
( лучше пока не придумал )

Тогда уж лучше DX - есть фильтры. Сложнее под Linux - но там есть OpenCV.
Вообще я делал так:
Linux, Lazarus, OpenGL,OpenCV, FFMpeg
Картинку обесцвечивать можно шейдерах.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Пред.След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 15

Рейтинг@Mail.ru