Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Bilder aus einer Webcam "auslesen"
sowas ähnliches hab ich in nem anderen Thread schon gefunden (Bilder einer Webcam / DV-Cam analysieren), ich mach aber trotzdem nen neuen auf, da es noch nix mit analysieren zu tun hat, wollte nicht zu sehr offtopic schreiben...
ich will von meiner webcam an die "rohdaten" kommen, sprich irgendwie einzelne Pixel auslesen können um diese dann weiterverarbeiten zu können. Hab mich jetzt mal in DirectX eingearbeitet aber irgendwie ist mir das noch nicht ganz klar wie das gehen soll.
In dem anderen Thread wird die Möglichkeit beschrieben die Bilder aus ner PictureBox auszulesen, geht das auch direkt im Graph von direktshow, also ohne umweg erst zeichnen dann lesen...?
bin für jeden tipp dankbar
Hallo ich glaub das das größte problem bei der sache ist das konvertieren von RGB in HGV. Ich bin gerade dabei das ganze über mLab von Mathworks zu realisieren.
wenn du näheres weißt, gib bitte bescheit
gruß xeus
Hi, Gunfire !
Hilft es dir, wenn ich dir eine Zip mit ein paar VC++ Projekten schicke, wo
so eine Bildauswertung drin ist ?
(eigentlich für den Lego-Mindstorms, aber man sieht, wie's läuft)
mfg robert
Könntest du mir es vielleicht auch schicken?
gruß
xeus
Gut, ich schau mal, ob ich so'n upload irgendwie zusammenbringe
:-k sieh' an, geht doch O:)
Gut, da isses, schaut mal rein mfg robert
Haftungsauschluß:
Sollt' irgendein PC zu rauchen beginnen-> ich war'S nicht
Haftung, Folgeschäden, demenz und andere Nebenerscheinungen gehen mich nix an
bist du dir sicher das die datei ok ist???
Hi, ich bin vielleicht bescheuert, aber nach 25 Jahren Programmieren wirst du nicht mehr nervös.
:-k Weiß nicht, hab's selbst probiert, konnte es downloaden :-b
Hallo, Xeus ! Ich hoff' dein listiges Kästchen kommt nicht drauf', was ich mir grad denk, ich weiß nicht, ob er das verträgt
mfg robert
danke erstmal,
das beispiel ist mit VfW gemacht, nicht mit DirectX, ich versuch das mit dem samplegrabber filter zu machen. leider muss ich directx benutzen da es 4 cameras sind, hast da vielleicht auch ein beispiel :-)
und was soll ich nicht vertragen?
Tut mir leid, da hab ich im Moment nix. Was sagt denn der Google dazu ?
mfg robert
NumberFive
23.01.2005, 10:03
Hallo ich habe das mit dem sample grapper fertig. in c++ MS 6.0
ist der Thread noch aktuell ?
Na sicher doch. Nachdem im Forum vornehmlich von Sachen berichtet wird, dir NICHT funktionieren, wär's schon, wenn du uns mal an einem Erfolg teilhaben läßt. mfg robert
ja er ist noch aktuell,
ich blick da noch nicht ganz durch, ich hab jetzt den samplegrabber soweit dass er mir bmp's auf die platte schreibt. ich will jedoch dass ich gleichzeitig auch den livestream anschauen kann, also:
ich will z.B. 1mal pro sekunde ein Bitmap aber live alles sehen.
ich hab das mal mit dem SmartTree versucht, der ja angeblich den stream teilen kann, leider zeigt er immer nur den gegrabbten teil an.
ja, wie PicNick sagt: "wär's schön, wenn du uns mal an einem Erfolg teilhaben läßt"
NumberFive
23.01.2005, 23:42
Ok leider habe ich den source nicht dabei.
so das ihn jetzt nicht hochladen kann.
also bei mir läuft prv und bilder klauen und auf die platte allso gleich zeitig.
aber vorsicht dann tut die kiste nix anders mehr (AMD 1000) scsi
einteil des source habe ich schon hier veröffentlicht.
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=2486
seite vier aber das hat gunfire ja schon
eines mene ich mich noch dunkel zu erinnern. das schreiben und bilder klauen gleichzeitig ist abhänig vom treiber der karte.
gunfire schreibst du das bilder im grapper ?
ja im grabber, aber eigentlich will ich gar nicht schreiben sonder nur analysieren, das schreiben war nur mal so zum testen.
hm wenn du schon mit 1 cam probleme bekommst bin ich mal gespannt wieviel ressourcen dann 4 brauchen, aber das soll nicht das prob. sein.
mir ist nur das mit dem preview nicht klar, wär cool wenn du mal was hochladen könntest.
NumberFive
23.01.2005, 23:57
ja du bekommst noch was so bald ich wieder zugriff habe.
das mit dem grapper vergiss es das tut jetzt noch aber die vorschau
wird nur noch ruckeln.ausser dem gibt das drop frames.
Hast du schon mal mit threads programmier ?
du muß die mit new einfach ein array of byte im speicher an legen
und den pointer dann per nachricht an den anderen Thread schicken.
in dem kannst du dann alles mit den daten machen was du willst.
so mache ich das auch.
Alles klar ?
Gruß
NumberFive
24.01.2005, 20:17
Hallo,
hier sind source auszüge.
Aber nicht kommerziell nutzen
STDMETHODIMP BufferCB( double SampleTime, BYTE * pBuffer, long BufferSize )
{
if(g_bWantBimap)
{
CBitmapData* pBitmapData = new CBitmapData;
if (!pBuffer)
return E_POINTER;
if( pBitmapData->lBufferSize < BufferSize)
{
if (pBitmapData->pBuffer)
{
delete [] pBitmapData->pBuffer;
}
pBitmapData->pBuffer = NULL;
pBitmapData->lBufferSize = 0;
}
// Since we can't access Windows API functions in this callback, just
// copy the bitmap data to a global structure for later reference.
pBitmapData->dblSampleTime = SampleTime;
// If we haven't yet allocated the data buffer, do it now.
// Just allocate what we need to store the new bitmap.
if (!pBitmapData->pBuffer)
{
pBitmapData->pBuffer = new BYTE[BufferSize];
pBitmapData->lBufferSize = BufferSize;
}
if( !pBitmapData->pBuffer )
{
pBitmapData->lBufferSize = 0;
return E_OUTOFMEMORY;
}
// Copy the bitmap data into our global buffer
memcpy(pBitmapData->pBuffer, pBuffer, BufferSize);
pBitmapData->Height = Height;
pBitmapData->Width = Width;
// Post a message to our application, telling it to come back
// and write the saved data to a bitmap file on the user's disk.
PostThreadMessage(m_pRoboControlThreadId, WM_CAPTURE_BITMAP, NULL, (long)pBitmapData);
g_bWantBimap = FALSE;
}
return S_OK;
}
das ist die routine wo das bild verschickt wird
class CBitmapData
{
public:
CBitmapData();
virtual ~CBitmapData();
double dblSampleTime;
long lBufferSize;
BYTE *pBuffer;
BITMAPINFOHEADER bih;
long Width;
long Height;
};
hier ist das bimapt drin
m_pGrabber->SetOneShot(FALSE);
m_pGrabber->SetBufferSamples(TRUE);
m_pGrabber->SetCallback(&g_CB, 1); // 0 = Use the SampleCB callback method.
hier wird der grapper über geben und der Mode bestimmt
// Jetzt den Framegrapper auf bauen
if (!m_pGrabber)
{
hr = m_pGrabber.CoCreateInstance( CLSID_SampleGrabber );
}
CComQIPtr< IBaseFilter, &IID_IBaseFilter > pGrabBase( m_pGrabber );
CMediaType VideoType;
VideoType.SetType( &MEDIATYPE_Video );
VideoType.SetSubtype( &MEDIASUBTYPE_RGB24 );
hr = m_pGrabber->SetMediaType( &VideoType ); // shouldn't fail
hr = pFg->AddFilter( pGrabBase, L"Grabber" );
// ende
das baut den grapper zu sammen
ich hoffe es hilft dir
wenn du mein test prg haben willst da sag bescheit
cool danke, soweit hab ichs im prinzip auch,
kannst du mir das testprog mal schicken? das mit dem preview ist da ja so auch net drin...
wär echt super. danke schonmal...
NumberFive
25.01.2005, 20:26
Hier das test Prg,
if( fMPEG2 )
{
hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,
&MEDIATYPE_Stream, pVCap, pGrabBase, NULL);
if( FAILED( hr ) )
{
ErrMsg(TEXT("Cannot build MPEG2 preview graph!"));
}
}
else
{
hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,
&MEDIATYPE_Interleaved, pVCap, pGrabBase, NULL);
if(hr == VFW_S_NOPREVIEWPIN)
{
// preview was faked up for us using the (only) capture pin
fPreviewFaked = TRUE;
}
else if(hr != S_OK)
{
// maybe it's DV?
hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,
&MEDIATYPE_Video, pVCap, pGrabBase, NULL);
if(hr == VFW_S_NOPREVIEWPIN)
{
// preview was faked up for us using the (only) capture pin
fPreviewFaked = TRUE;
}
else if(hr != S_OK)
{
ErrMsg(TEXT("This graph cannot preview!"));
fPreviewGraphBuilt = FALSE;
return FALSE;
}
}
//
// Render the closed captioning pin? It could be a CC or a VBI category pin,
// depending on the capture driver
//
if(fCapCC)
{
hr = pBuilder->RenderStream(&PIN_CATEGORY_CC, NULL,
pVCap, NULL, NULL);
if(hr != NOERROR)
{
hr = pBuilder->RenderStream(&PIN_CATEGORY_VBI, NULL,
pVCap, NULL, NULL);
if(hr != NOERROR)
{
ErrMsg(TEXT("Cannot render closed captioning"));
}
}
}
}
MS:
// build the preview graph!
//
// !!! PLEASE NOTE !!! Some new WDM devices have totally separate capture
// and preview settings. An application that wishes to preview and then
// capture may have to set the preview pin format using IAMStreamConfig on the
// preview pin, and then again on the capture pin to capture with that format.
// In this sample app, there is a separate page to set the settings on the
// capture pin and one for the preview pin. To avoid the user
// having to enter the same settings in 2 dialog boxes, an app can have its own
// UI for choosing a format (the possible formats can be enumerated using
// IAMStreamConfig) and then the app can programmatically call IAMStreamConfig
danke erstmal,
das beispiel ist mit VfW gemacht, nicht mit DirectX, ich versuch das mit dem samplegrabber filter zu machen. leider muss ich directx benutzen da es 4 cameras sind, hast da vielleicht auch ein beispiel :-)
und was soll ich nicht vertragen?
hihi.. hier ein fremder googler... ist schon ein starkes stück, in das eingabefeld eines fremden users durch google zu gelangen !!!!
NumberFive
10.04.2006, 06:57
Hallo gast was soll mir das jetzt sagen ?
Gruß
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.