Acquisition video (webcam, tv cards ...)

Soyez le premier à donner votre avis sur cette source.

Vue 49 064 fois - Téléchargée 5 714 fois

Description

J'ai essayé de réécrire un composant d'acquisition vidéo en utilisant les fonctions de la DLL AviCap32.dll, et en restant au plus près de ces fonctions.
Les derniers sources que nous avons vu ici, usaient (et abusaient) de copier-coller pour présenter dans un TImage une vidéo rendue invisible à sa création !
Il y a ici, une utilisation des fonctions callback pour générer les évènements,
Il y a en plus, un bitmap intégré au composant qui permet de faire de l'incrustation de texte et de dessin dans l'image vidéo.

La démo présente deux points principaux :

1 - Incrustation
L'incrustation est obtenue en utilisant le canvas d'un bitmap du composant. Lors des évènements générés par les fonctions callback, lorsqu'il y a accès au buffer image captée (OnFrame et OnVideoStream), on fusionne ce buffer et les pixels du bitmap. J'encourage chaque utilisateur à écrire ses propres alogorithmes de fusion, selon ses besoins.
On peut ansi visualiser une capture avec incrustation ou enregistrer un flux vidéo avec incrustation

2 - Analyse d'image et détection de mouvement
Cette analyse est effectuée à chaque nouvelle trame, et si un mouvement est détecté, un cadre est ajouté à l'image vidéo par incrustation

Conclusion :


Limitations :

- Pas d'enregistrement des incrustations si on utilise un codec vidéo de compression (comme DivX, Intel IYUV ou autre). (le flux est probablement détourné avant de parvenir au composant)

(Z'avez vu la capture de la capture de la capture de la capture de la capture de la capture de la capture de la capture de la capture .....)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

defis91
Messages postés
66
Date d'inscription
samedi 29 octobre 2005
Statut
Membre
Dernière intervention
8 août 2011

Salut Kenavo,
5 ans après, la mise à disposition de ton composant bien utile, encore une remarque.
A l'époque je l'avais utilisé pour une détection de mouvement qui fonctionnait parfaitement.
Interfacé à un servo moteur, la caméra suivait les déplacements.
Je reprends ce programme pour le lancer à heure fixe et j'ai un petit problème.
Après avoir fait un capture.disconnect on ne peut pas faire un capture.connect sans le déclanchement d'une erreur fatale.
Une idée ?
Merci
Dom EFIS.
sebnet06
Messages postés
2
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
31 mars 2010

Merci Kenavo,
Sa marche impeccable.
cs_Kenavo
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
2
Salut,

Je crois que tu as des erreurs dans la récupération des valeurs U et V

// calcul des indices
n := (H * W) + ((j div 2) * (W div 2) + (i div 2));
m := (H div 2) * (W div 2) + n;

// Lecture des valeurs
U := pointbyte[n];
V := pointbyte[m];

Amuse-toi bien !

Ken@vo
sebnet06
Messages postés
2
Date d'inscription
samedi 18 novembre 2000
Statut
Membre
Dernière intervention
31 mars 2010

Bonjour,

Merci pour ce composant.
J'aimerai copier l'affichage de ma camera sur un bitmap, mon problème est que elle utilise un format (IYUV et I420) et je ne parvient pas a recuperer les bonnes couleurs.

Je fait parcourir i de 0 à (Bitmap.height -1) et j de 0 à (Bitmap.width -1)
J'utilise un Bitmap de 120*160.

Y := pointbyte[i*160+j];
U := pointbyte[(i div 2)*(160 div 2) +j div 2 +(i*j)];
V := pointbyte[(i div 2)*(160 div 2) +j div 2 +(i*j) +(i*j)div 4];

Ensuite j'utilise la formule de conversion de YUV en RGB :

//Red
R := trunc(1.164*(Y - 16) + 1.596*(V - 128));
if R < 16 then R := 0;
if R > 255 then R := 255;

//Green
G := trunc(1.164*(Y - 16) - 0.813*(V - 128) - 0.391*(U - 128));
if G < 0 then G := 0;
if G > 255 then G := 255;

//Blue
B := trunc(1.164*(Y - 16) + 2.018*(U - 128));
if B < 0 then B := 0;
if B > 255 then B := 255;

et j'affiche sur mon bitmap le resultat :

Image1.Picture.Bitmap.canvas.Pixels[j,i] := RGB(R,G,B);

Je pense que je récupère mal mes composant YUV.
Quelqu'un a t' il la solution a mon problème?

Merci.
cs_krzysiu
Messages postés
22
Date d'inscription
mardi 13 juillet 2004
Statut
Membre
Dernière intervention
3 septembre 2011

Bonjours,

merci pour ce composant qui fonctionne parfaitement.
J'aurais souhaiter pouvoir récupérer la valeur des couleurs des pixel en RGB dans le flux vidéo, pour pouvoir détecter la présence d'un objet de couleur. Quelqu'un aurait'il un début de piste ? Merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.