Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2011, 14:43   #1
FoxWMulder
 
Регистрация: 19.01.2011
Сообщений: 4
По умолчанию Захват изображения с камеры И ВЫВОД НА CANVAS

Всем здрасти.
Хочу получить изображение с камеры и отслеживать передвижения объекта, точнее просто яркого пятна на изображении. Изображение получил, вывел на Panel ( код брал например отсюда http://ignatiev.su/blog/posts/webcam-borlanddelphi-7 ).
Вся суть проблемы что у панели нету канваса, и мне не считать цвет пикселей. Сначало я решил эту проблему весьма плохо (дебельным способом). Скопировав изображения с канваса экрана и поместив его в image. но это конечно не годиться и впервую очередь для реализиции моей идеи. Идея состоит в том чтобы передвигать камеру-курсор в игре при помощи вебкамеры. Конечно это может оказаться не примелимым, но в теории более-менее может все работать.
Единственный вопрос который меня сейчас беспокоит и кторый реально мне мешает:
Как получить изображения с камеры на объект который ИМЕЕТ CANVAS, например в image, а не на panel? а все коды которые я находил в инете выводили изображение на панель

Последний раз редактировалось FoxWMulder; 19.01.2011 в 14:46.
FoxWMulder вне форума Ответить с цитированием
Старый 19.01.2011, 15:16   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Сообщение от FoxWMulder Посмотреть сообщение
у панели нету канваса, и мне не считать цвет пикселей
По-вашему пиксели прямо в видеопамяти хранятся, если какого-то там канваса нет, о наличии которого никто, кроме дельфовых компонент, и не догадывается, кстати. Что мешает взять DC у панели и работать с ним? Панель, как-никак, является полноценным окном со своим handle.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 19.01.2011, 15:23   #3
FoxWMulder
 
Регистрация: 19.01.2011
Сообщений: 4
По умолчанию

Вот конкретней напишите пожалуйста, и просто примного благодарен буду, отзыв вам добавлю.
Одно из двух либо мне надо скопировать изображение с панели и вставить на image чтобы я мог работать с канвас. либо напишите как мне адаптировать вот эту строчку для панели
Код:
if inttostr(Image1.Canvas.Pixels[x,y])='16777215' then begin
Вот handle, пробовал всяко разно, но я не знаю как обратить к пикселю на панели или чтото вроде того. А вся основная загвоздка именно в этом. Потом уже надо будет с точнностью чтото делать, со скоростью обработки и тп, дальше я уже хоть знаю в какую сторону что копать.

вот например я копирую с экрана в image

Код:
  DeskTopDC := GetWindowDC(GetDeskTopWindow);
  DeskTopCanvas := TCanvas.Create;
  DeskTopCanvas.Handle := DeskTopDC;

 BitBlt(Image1.Canvas.Handle, 0, 0,320, 240,
        DeskTopDC, Form1.Left+VideoPanel.Left, Form1.Top+VideoPanel.Top, SRCCOPY);
не про это ли вы случаем? тогда понятьбы как его для панели переделать

Последний раз редактировалось FoxWMulder; 19.01.2011 в 15:49.
FoxWMulder вне форума Ответить с цитированием
Старый 19.01.2011, 15:58   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Ну если совсем в лоб, то GetDC() и GetPixel().

Цитата:
inttostr(Image1.Canvas.Pixels[x,y])='16777215'
Это ж сколько у вас каждый кадр будет так обрабатываться?

Цитата:
Потом уже надо будет с точнностью чтото делать, со скоростью обработки
Не, это уже сейчас надо делать. Потом, когда у вас каждый кадр будет по две минуты обрабатываться, делать уже что-то будет поздно. Можно, конечно, глянуть в сторону GetDIBits(), но это полурешение.

Годным решением будет получать видеоданные от камеры напрямую, без всяких панелей. Кстати, это гораздо проще, чем возня с DC и битмапами.

ЗЫ: отзыв от новичков не влияет на репу
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 19.01.2011, 17:06   #5
FoxWMulder
 
Регистрация: 19.01.2011
Сообщений: 4
По умолчанию

c GetDC хоть и работает но вот
Код:
    Image1.Canvas.copymode := cmSrcCopy;
  pDC := GetDC(VideoPanel.Handle);
  pCanvas := TCanvas.Create;
  pCanvas.Handle := pDC;

 BitBlt(Image1.Canvas.Handle, 0, 0,320, 240,
        pDC, 0, 0, SRCCOPY);
хахаха. смех весь в том что, что как только приложение сворачиваеш все перестает работать. когда развернул приложения, видно что на панели кусок рабочего стола отрисован. чето я туплю чтоли или... почему на панели кусок рабочего стола? ведь на нее идет вывод с камеры? башка уже кипит.

Цитата:
inttostr(Image1.Canvas.Pixels[x,y])='16777215'

Это ж сколько у вас каждый кадр будет так обрабатываться?
самое интересное что ниче так, работает.
пока приложение поверх всех окон, все более-менее отслеживается, и курсор бегает по экрану, в нужные стороны, но как только приложение сворачиваешь то усе

Цитата:
ЗЫ: отзыв от новичков не влияет на репу
все равно. спасибо

Цитата:
Годным решением будет получать видеоданные от камеры напрямую, без всяких панелей. Кстати, это гораздо проще, чем возня с DC и битмапами
думаю для меня не проще, понятия не имею как это
FoxWMulder вне форума Ответить с цитированием
Старый 20.01.2011, 10:36   #6
Gambler
Игрок
Форумчанин
 
Аватар для Gambler
 
Регистрация: 29.10.2006
Сообщений: 367
По умолчанию

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

Вложил пример. Тут много лишнего, но свое найдешь.

А вот это получение изображения средствами DSPack
Код:
SampleGrabber.GetBitmap(BMP);
Разница очевидна. Если что то не понятно - пиши в личку.
Вложения
Тип файла: rar XCam.rar (3.6 Кб, 246 просмотров)
Жизнь всегда игра. Но смерть - не всегда поражение.

#define true (Math.random()>0.5) //Удачной отладки
Gambler вне форума Ответить с цитированием
Старый 20.01.2011, 16:53   #7
Ghost of Night
Форумчанин
 
Аватар для Ghost of Night
 
Регистрация: 08.08.2010
Сообщений: 371
По умолчанию

Если так уж хочется на панели канву видеть, то слепи их вместе, получиши новый компонент и юзай его.
Хакинг - не преступление, а способ выживания.
Ghost of Night вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
захват фото с веб камеры (дэлфи) dyonysos Мультимедиа в Delphi 4 03.06.2015 13:09
Захват видеопотока с IP-камеры Greek9000 Софт 5 30.01.2015 06:11
Захват видео с веб-камеры alexprey Мультимедиа в Delphi 8 09.07.2010 15:28
Захват виде потока с веб камеры MaxDDT Фриланс 1 05.01.2010 21:08
C#/C++ Захват видео с камеры через WiFi или Bluetooth yurban Общие вопросы C/C++ 2 02.10.2008 09:22