Magnusha Skrevet 28. oktober 2013 Del Skrevet 28. oktober 2013 (endret) Er ikke helt sikker på om dette er riktig forum, men jeg prøver meg. Har et lite CMOS kamera som jeg har koblet til en mikrokontroller. Denne mikrokontrolleren leser dataene fra kameraet og sender dataene til min PC. I følge spesifikasjonene til kameraet så er det JPEG komperimering på kameramodulen. Jeg får riktige start og slutt byte fra kameraet i følge JPEG standarden (http://en.wikipedia.org/wiki/JPEG) da de 2 første bytene er FF D8 og de 2 siste er FF D9 som indikerer "Start Of Image" og "End Of Image". Problemet er at jeg ikke får vist dette bildet i Windows. Har førsøkt å lese bildet i Matlab med imread(), men får feilmeldingene: Warning: JPEG library error: Corrupt JPEG data: 44 extraneous bytes before marker 0xc4. Warning: JPEG library error: Bogus Huffman table definition. Måten jeg lager .jpg filene er at jeg åpner en hex editor og limer inn dataene jeg får fra mikrokontorlleren og lagrer dette som et .jpg bilde. Er dette riktig? En annen ting også, kameraet kan også sende ukomprimerte data (Y4,Y8,RGB12,RGB16,RGB24,YUV16) men hvordan får jeg gjort om disse som bilder f.eks .jpg? Databladet til kameramodulen finnes her: http://www.electronics123.net/amazon/datasheet/C329_SPI_data.pdf Takker for alle svar! Endret 29. oktober 2013 av Magnusha Lenke til kommentar
Pc Lynet Skrevet 28. oktober 2013 Del Skrevet 28. oktober 2013 Linken din fungerer ikke. Lenke til kommentar
Kristallo Skrevet 28. oktober 2013 Del Skrevet 28. oktober 2013 Linken har to ekstra tegn på slutten som man må ta bort før den fungerer. Jeg tror jeg har en modul med den chipen og jeg lagret bare dataene sånn som du nevner og jeg kan åpne bildene direkte i photoshop. Det er mange ting som kan gjøre at dataene blir forandret på veien fra kameraet til fila. Du burde lage et program som åpner porten for binære data og skrive dataene direkte til en fil åpnet i binært modus. Det kan være problemer med linjeendinger, kontrollkoder, endian osv... i tillegg til kopi og lim inn operasjonen. Å komprimere til JPEG krever en relativt kraftig mikrontroller med en del RAM, det er en dårlig ide å prøve det før du vet at alt fungerer perfekt. Prøv RGB24, det kan photoshop lese direkte. Hvis du ikke har noen programmer som kan vise bildet så poster du bare fila så er det alltids noen som fikser det. Lenke til kommentar
se# Skrevet 28. oktober 2013 Del Skrevet 28. oktober 2013 Det er mange ting som kan gjøre at dataene blir forandret på veien fra kameraet til fila. Du burde lage et program som åpner porten for binære data og skrive dataene direkte til en fil åpnet i binært modus. Enig med Kristallo at det er nok en fordel å lese dataene i binær modus fra kontrolleren. En copy/paste av binære data kan gjøre endringer på dataene. Lenke til kommentar
Magnusha Skrevet 30. oktober 2013 Forfatter Del Skrevet 30. oktober 2013 Prøv RGB24, det kan photoshop lese direkte. Hvis du ikke har noen programmer som kan vise bildet så poster du bare fila så er det alltids noen som fikser det. Hvordan format bør jeg lagre det i? Lenke til kommentar
Kristallo Skrevet 30. oktober 2013 Del Skrevet 30. oktober 2013 RGB24 eller Y8 skal photoshop kunne lese ved å velge Photoshop RAW som filformat. Man må skrive inn oppløsningen på bildet manuelt. Du bare dumper dataene fra kameramodulen til en fil etter å ha bedt kameraet om bilde i et av de formatene. 1 Lenke til kommentar
se# Skrevet 30. oktober 2013 Del Skrevet 30. oktober 2013 Hvordan format bør jeg lagre det i? Det er jo mange språk/rammeverk/bibliotek som har funksjon for å lagre både TIF og JPG (sikkert BMP også) hvis du vil ha det som en fil med standard format. Det er ikke noe fasitsvar på hva du bør lagre det som, det spørs jo på bruksområdet senere, men hvis du ikek har noe i mot lossy komprimering er jo JPG et greit format som nesten alle program kan vise. Lenke til kommentar
Magnusha Skrevet 5. november 2013 Forfatter Del Skrevet 5. november 2013 Jeg får ikke noe bilder fra datane jeg har vedlagt. Er det noen av dere som greier å se om det er noe gyldige data i disse filene? Vedlagt ligger et Y8 320x240, et RGB24 320x240 og et JPEG bilde 640x480. Hadde vært supert hvis dere greide å få noe data fra disse filene JPEG_640x480.txt RGB24_320x240.txt Y8_320x240.txt RGB24_80x60.txt Lenke til kommentar
arthon Skrevet 5. november 2013 Del Skrevet 5. november 2013 Det virker som du mangler et viktig komponent i opplegget ditt, nemlig Hex til Image konverterings software. Du kan ikke regne med at noen vanlig foto redigerings program kan konvertere Hex til en brukbar kodek. Det eneste du har er en data stream, men ingenting som tolker og render det til bilde informasjon. Etter å ha prøvet filen i flere online data konverterere ser det ut som dataen din mangler viktige data URI for å kunne bli renderet som et bilde. Alle analyse programmene jeg prøver sier at dette er ikke Image files. Prøv selv; http://dataurl.net/#dataurlmaker (hvis du ikke får bilde når du legger inn bilde dataen din her så har du ikke fullstendig bilde data) http://www.percederberg.net/tools/text_converter.html http://duri.me PS; disse linkene går til online convertere som egentlig gjør det motsatte av det du ønsker. Lenke til kommentar
se# Skrevet 6. november 2013 Del Skrevet 6. november 2013 Det virker som du mangler et viktig komponent i opplegget ditt, nemlig Hex til Image konverterings software. Enig, legger man først data inn i tekst-filer er det sannsynlig at man mister noe så du trenger et program som tolker og lagrer data. Enten må du finne et program som gjør dette eller lage noe selv, trodde du holdt på med det siste? Uten å vite eksakt hva du gjør er det vanskelig å komme med råd. Programmerer du selv så avhenger det av hvordan du får dataene ut fra kameraet. Leser du jpg-data ut fra en port må du enten lagre det binært rett til en fil eller lese en stream og rendre det i programmet ditt. Har du først data i et buffer i memory kan du bruke funskjoner i programmeringsspråket eller et bibliotek for å lagre buffer i det filformatet du ønsker. Det kan så leses inn i et editeringprogram hvor du sannsynligvis må legge på en gammakurve for å få et brukbart bilde (hvis ikke det gjøres autoamtisk av programmet). Leser du RGB-data blir fremgangsmåten mye den samme, da kan du opprette et "tomt bilde" i programmet ditt og så sette piksel for piksel etter hvert som du leser datastrømmen. Det er lenge siden jeg har programmert noe slik så jeg husker ikke alle detaljer, men det bør ikke være spesielt vanskelig. Lenke til kommentar
arthon Skrevet 6. november 2013 Del Skrevet 6. november 2013 Jeg har egentlig ikke peling på dette, men noen av linkene jeg kom over i går kan kanskje gi noe ide om hva som trengs av programmering. Hex from text file to jpg file conversion(?) Converting Image stored as Hex to Jpeg (?) Easily converting hex code to image (?) Lenke til kommentar
tomsi42 Skrevet 6. november 2013 Del Skrevet 6. november 2013 Hva slags programmeringspråk har du til kontrolleren din? Lenke til kommentar
Magnusha Skrevet 6. november 2013 Forfatter Del Skrevet 6. november 2013 Hva slags programmeringspråk har du til kontrolleren din? Selve mikrokontolleren bruker C. Sitter å prøver i Matlab nå med å få dataene inn der. Har fått Matlab til å lese fra COM-porten og får dataene, mener litt usikker på hva jeg skal gjøre med dem? Har forsøkt å lagre til .jpg med fwrite() kommandoen i matlab, men det hjalp ikke noe. Har du/dere noen forslag? Lenke til kommentar
tomsi42 Skrevet 6. november 2013 Del Skrevet 6. november 2013 Ok, så du sender kommandoer til mikrokontrollerene via en serieport, og får data tilbake via serieporten? Er dataene du mottar slik som de er i eksempelfilene over? Slik at hvis du lagrer de med fwrite fra matlab, så ser de likedan ut? Lenke til kommentar
Kristallo Skrevet 6. november 2013 Del Skrevet 6. november 2013 (endret) Jeg prøvde å konvertere Y8 fila men den ser ut til å være i bayerformat. Når jeg plukker ut bare en av farvekanalene i det lille bildet så ser man klart at kameraet fungerer og bildet er ute av fokus. RGB24 fila ser ut til å være i identisk bayerformat som Y8 så jeg mistenker at du ikke får valgt korrekt bildeformat. Jeg antok at formatet i fila var heksadesimal, to ASCII tegn pr piksel. Endret 6. november 2013 av Kristallo 1 Lenke til kommentar
Magnusha Skrevet 6. november 2013 Forfatter Del Skrevet 6. november 2013 Jeg sender ingenting til mikrokontrolleren. Den starter opp, sjekker om alt er i orden og spør etter et bilde. Deretter overføres bilde over USART til serieporten. I begynnelsen brukte jeg et terminalvindu hvor jeg fikk dataene rett inn, og kopierte dem inn i en hex-editor og lagret som .jpg. Nå har jeg forsøkt med Matlab hvor jeg lagrer bildene som både .jpg og som .bin. Dataene jeg mottar ser helt like ut som de filene over i matlab også ja. Lenke til kommentar
Magnusha Skrevet 6. november 2013 Forfatter Del Skrevet 6. november 2013 Jeg prøvde å konvertere Y8 fila men den ser ut til å være i bayerformat. Når jeg plukker ut bare en av farvekanalene i det lille bildet så ser man klart at kameraet fungerer og bildet er ute av fokus. RGB24 fila ser ut til å være i identisk bayerformat som Y8 så jeg mistenker at du ikke får valgt korrekt bildeformat. Jeg antok at formatet i fila var heksadesimal, to ASCII tegn pr piksel. Hvordan fikk du til det? Hvilket program brukte du? Lenke til kommentar
tomsi42 Skrevet 6. november 2013 Del Skrevet 6. november 2013 Jeg sender ingenting til mikrokontrolleren. Den starter opp, sjekker om alt er i orden og spør etter et bilde. Deretter overføres bilde over USART til serieporten. I begynnelsen brukte jeg et terminalvindu hvor jeg fikk dataene rett inn, og kopierte dem inn i en hex-editor og lagret som .jpg. Nå har jeg forsøkt med Matlab hvor jeg lagrer bildene som både .jpg og som .bin. Dataene jeg mottar ser helt like ut som de filene over i matlab også ja.Slik jeg ser det, å ser det ut som om filene er rene textfiler med hex-koder og må dermed konverteres til binært format. Jeg slengte sammet et C program; men det ble ikke JPEG fil for det ... #include <stdio.h> #include <stdlib.h> void convert_file(char * in_file, char * out_file) { FILE * inp; FILE * outp; inp = fopen(in_file, "r"); outp = fopen(out_file, "wb"); if ((inp != NULL) && (outp != NULL)) { char inbuf[3]; char unsigned ch; inbuf[2] = '\0'; while (fread(inbuf, 2, 1, inp) != 0) { ch = strtol(inbuf, NULL, 16); fwrite(&ch, sizeof(ch), 1, outp); } fclose(inp); fclose(outp); } } int main(int argc, char ** argv) { if (argc != 3) { fprintf(stderr, "usage: %s infile outfile\n", argv[0]); exit(1); } convert_file(argv[1], argv[2]); return 0; } Lenke til kommentar
se# Skrevet 6. november 2013 Del Skrevet 6. november 2013 Sett denne? http://www.morethantechnical.com/2013/04/25/c-library-for-the-c329-spi-camera-module-w-code/ Lenke til kommentar
Kristallo Skrevet 6. november 2013 Del Skrevet 6. november 2013 (endret) Jeg laget et program som tomsi42, det er fort gjort. Det mangler en byte i JPEG fila så du må prøve å lage en ny. Siden hver byte er beskrevet med et tosifret heksadesimalt nummer så må fillengden være delelig på to og det er den ikke. Siden JPEG fila slutter med rett markør så må det mangle en byte inne i fila noe sted. Endret 6. november 2013 av Kristallo Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå