Mi piacerebbe eseguire una riduzione del colore tramite ridimensionamento del colore.Riduzione della profondità del colore con opencv e LUT
come in questo esempio:
la prima immagine è risoluzione CGA, il secondo è EGA, il terzo è HAM. Mi piacerebbe farlo con cv :: LUT perché penso che sia la via migliore per farlo. posso fare con scala di grigi con questo codice:
Mat img = imread("test1.jpg", 0);
uchar* p;
Mat lookUpTable(1, 256, CV_8U);
p = lookUpTable.data;
for(int i = 0; i < 256; ++i)
p[i] = 16 * (i/16)
LUT(img, lookUpTable, reduced);
originale:
colore ridotto:
ma se provo a che fare con il colore ottengo strano risultato ..
con questo codice:
imgColor = imread("test1.jpg");
Mat reducedColor;
int n = 16;
for (int i=0; i<256; i++) {
uchar value = floor(i/n) * n;
cout << (int)value << endl;
lut.at<Vec3b>(i)[2]= (value >> 16) & 0xff;
lut.at<Vec3b>(i)[1]= (value >> 8) & 0xff;
lut.at<Vec3b>(i)[0]= value & 0xff;
}
LUT(imgColor, lut, reducedColor);
da dove posso ottenere la comprensione completa e l'uso di LUT? Ho visto la documentazione di Opencv ma è solo rigorosa per la sintassi. Cosa si fa se si desidera salvare i valori di questa immagine LUT e si desidera applicarlo su altri valori uguali – AHF
Lo scopo di LUT è di cambiare i colori di un'immagine in base a una tabella di ricerca. Questo può avere vari scopi, come la riduzione della risoluzione del colore come fase di pre-elaborazione nella segmentazione dell'immagine. Consulta questo articolo di Wikipedia per ulteriori informazioni: http://en.wikipedia.org/wiki/Colour_look-up_table – xperroni
Per applicare la stessa trasformazione LUT a immagini diverse, puoi modificare la funzione 'colorReduce()' in alto per accettare un fare riferimento a una tabella di ricerca come argomento, quindi calcolare la tabella in una chiamata separata a 'lookupTable()' o qualsiasi altro metodo che si ritenga appropriato. – xperroni