FEHLERMELDUNG, Brauche DRINGEND Hilfe.
-
So vieleicht besser? Nur dass hilft mir leider bei meinem Problem nicht weiter.
-
Was ist den das für ein Objekt, auf das du einen Zeiger hast? Da gibt es ja irgendeine Struktur dahinter. Da solltest du mal nach googlen, wenn du das nicht irgendwie in einer Doku mitgeliefert bekommen hast.
-
Dass weiss ich leider nicht,
Ich weiss nur dass angeblich in m_ImageBuffer eins Pointer ist der aus die anfangsadresse zuweisst an der die Informationen drinstehen an deen en ich drann will.Die Kamera besitzt 4096 messpunkte (Pixel) die monochrom jeder 8 bit (1 Byte)farbinformation weiterschickt. somit wahre die information die ich brauche 32768bits gross oder 4096byts gross.
mehr weiss ich im moment auch nicht.
Ich musste wohl jede adresse zwischen 58064928 und 60555296 abfragen und der 1byte grosse wert in eine variable speichern und jedeslam nach links verschieben, damit ich alle 4096 bytes erhalte und so die information meines bildes habe.
es wird doch eine moeglichkeit geben auf diese adresse (z.b. 58064928 )zuzugreifen und die information abzulesen?!?
Finde leider nichts im netz.
Bin der meinung : Wenn es moeglich ist einen wert in eine Adresse zu schreiben dann sollte es auch moeglich sein auf diese adresse zurueckzugreifen und abzulesen ohne sie zu loeschen, oder?
-
Bin der meinung : Wenn es moeglich ist einen wert in eine Adresse zu schreiben dann sollte es auch moeglich sein auf diese adresse zurueckzugreifen und abzulesen ohne sie zu loeschen, oder?
Also wenn du diese Adresse meinst:
int i = 5; std::cout << "var i hat Wert: " << i << " und Adresse: " << &i << std::endl;
-
Ja fasst, die adresse muesste ich eigentlich ueber den pointer der in m_ImageBuffer steht haben, nur wie bekomme ich sie,?
m_ImageBuffer hat den pointer der die adresse des Bildes hat.
Wie mache ich dass den jetzt damit ich das bild (Code) bekomme , anstadt die drei zahlen:
63045664
58064928
60555296Wie fragt man eigentlich einen wert ab der in einer bestimmten adresse gespeichert ist (in meinem Fall die adresse 63045664 (WENN DASS UEBERHAUPT EINE ADDRESSE IST)) ?
-
Der Thread der unverständlichen Sätze.

-
Hier mal ein Beispiel, wie ich auf die Bitmapdaten eines IplImage (OpenCV) zugreife. Keine Ahnung, welchen Image-Typ du da hast, aber das Prinzip wird dasselbe sein. Vielleicht hilft es dir:
//------------------------------------------------------------------------------------------------------------------------- // Gibt die Farbwerte eines Pixels eines IplImages in der Struktur PixelColorRGB zurück. //------------------------------------------------------------------------------------------------------------------------- void CDlgDOF::GetPixelColor(IplImage *iplBmp,PixelColorRGB *pcRet,uint row,uint col) { //------------------------------------------------------------------------------------------------------------------------- ImageStart(iplBmp); UINT* pixels = (UINT*)iplBmp->imageData;//(UINT*)bmpData.Scan0; // pcRet->a=(pixels[row*iplBmp->widthStep/4+col]&0xff000000)>>24; //Alpha pcRet->r=(pixels[row*iplBmp->widthStep/4+col]&0x00ff0000)>>16; //Rot pcRet->g=(pixels[row*iplBmp->widthStep/4+col]&0x0000ff00)>>8; //Grün pcRet->b=(pixels[row*iplBmp->widthStep/4+col]&0x000000ff); //Blau ImageEnd(iplBmp); }Wenn du den ARGB Farbraum verwendest (32 Bit), bekommt jeder Kanal 8 Bit zugeteilt. Die 4 Kanäle eines Pixels werden zusammen in einer 32 Bit Variable gespeichert. Du musst sie also erst mit bitweisem OR und Bitshifts auseinander friemeln, wie im Beispiel.
EDIT: Mein IplBmp->imageData dürfte deinem m_ImageBuffer entsprechen.
-
Cool, dass probiere ich mal aus, DANKE!!
Mein bild is monochrom ind jeder messpunkt gibt mir eine 8bit information.
Kann ich diese RGB-zeilen in meinem fall dann nicht weglassen?
da muesste ich eigentlich jedes byte (8bits) einzeln analysiren und dann jenachdem wie hoch der wert ist (Schwarz) es ist ermessen ob ich es annehme oder nicht.
-
pcRet->a=(pixels[row*iplBmp->widthStep/4+col]&0x00ff0000)>>24; //AlphaMüsste es da nicht 0xff000000 heißen?
-
Fellhuhn schrieb:
pcRet->a=(pixels[row*iplBmp->widthStep/4+col]&0x00ff0000)>>24; //AlphaMüsste es da nicht 0xff000000 heißen?
Du hast natürlich Recht. Ich benötige den Alpha-Kanal in diesem Programm nicht und habe die Zeile nur der Vollständigkeit halber ergänzt. Mein Fehler...
-
Nightlord schrieb:
Cool, dass probiere ich mal aus, DANKE!!
Mein bild is monochrom ind jeder messpunkt gibt mir eine 8bit information.
Kann ich diese RGB-zeilen in meinem fall dann nicht weglassen?
da muesste ich eigentlich jedes byte (8bits) einzeln analysiren und dann jenachdem wie hoch der wert ist (Schwarz) es ist ermessen ob ich es annehme oder nicht.Ja, in dem Fall dürftest du ganz einfach byteweise vorgehen können (hatte ich übersehen). Bei 8 Bit müssten das ja dann 256 Graustufen sein. Was meinst du denn mit annehmen oder nicht annehmen?
-
Na ich muss sehen ob der wert z.b. grosser oder kleiner ist als 20.
Bei kleine ist kein material vorhanden,
bei groesser als 20 dann ist material vorhanden.
Das habe ich gemeint, sorry.hab mir das so Ueberlegt:
int bitCode = 0; //byte aus der adresse der ein messpunkt der kamera darstellt (1 pixel des Bildes)
int breite = 0; //wert zur berechnung der Breite des materials. Jeder bit entsprechen 0.127mm am material
int bildByte = 0; // graustufe des pixels (Messpunktes)
while( adresse < adresse+4096){ // adresse 58064928, bildbreite 4096, damit alle adressen und damit das ganze bild gepruefft wird
copyvalue (VonAdresse, nach bildByte); der befehl zum kopieren kenne ich nicht !!! Wahre fein wenn mir jemad da helfen koennte.
SchiebeNachLinks (bildCode, Um_1_Byte); // kenne den befehl der dass bewirkt auch nicht. Wenn bildCode z.b. ... 000 000 000 125 250 250 250 ist,soll daraus ... 000 000 125 250 250 250 000 werden also, um ein byte verschieben und mit 0nachfullen.
bildCode = bildCode + bildByte; // dass muesste so gehen. damit wenn z.b. bildCode ... 000 000 125 250 250 250 000 und bildByte 148 ist, dann ist der neue bildCode = ... 000 000 125 250 250 250 148
adresse = adresse + 1; // damit naechste adresse genommen wird.
If (bildByte >= 20){ // wenn groesser als 20 dan habe ich material. wenn kleiner dann ist kein material da.
breite = breite + 1; // damit ich breite des materials berechnen kann.
}
}
Kenne einige befehle nicht desswegen kann dass nicht so funktionieren aber mit den richtigen befehlen muesste es gehen, oder ???
Wenn jemand die befehle kennt, dann bitte melden, ok? Danke.p.s. dass mit dem "SchiebeNachLinks" funktioniert so:
Wenn der Code 123456 ist und nach Links verschiebt wird , wird daraus 1234560 (also mit dem wert 10 multipliziert)wird dann der byte des pixels Hier imbeispiel "9" dazuaddiert, sollte daraus 1234569 werden.So habe ich am ende ein Code Der das ganze Bild wiederspiegelt (Hoffe ich zumindest).Euer Nightlord
-
Oh, ich hatte dir eigentlich am Freitag noch etwas gepostet, zumindest wollte ich das (da scheine ich wohl in der Eile das Abschicken vergessen zu haben...).
Na ja...
Hast du denn einfach mal etwas ganz Simples wie z.B. das hier versucht?
UINT iCount20=0; for(int i=0;i<iBytes;i++) { //iBytes soll die Anzahl der Bytes deines Bildes beinhalten. //(die wahrscheinlich in der Klasse zu finden ist, der auch //m_ImagePointer angehört) if(m_ImagePointer[i]>20) { //mache irgendwas, z.B. Pixel mit Wert über 20 zählen: iCount20++; } }Wenn hier was Ordentliches 'rauskommt, hast du schonmal einen Anfang. Dann kannst du dir überlegen, wie du das Bild weiter verarbeiten willst.