Sto cercando di utilizzare OpenCV 2.3.1 per convertire un'immagine Bayer a 12 bit in un'immagine RGB a 8 bit. Questo sembra che dovrebbe essere abbastanza semplice utilizzando la funzione di cvCvtColor, ma la funzione genera un'eccezione quando lo chiamo io con questo codice:Converti immagini Bayer a 12 bit in RGB a 8 bit utilizzando OpenCV
int cvType = CV_MAKETYPE(CV_16U, 1);
cv::Mat bayerSource(height, width, cvType, sourceBuffer);
cv::Mat rgbDest(height, width, CV_8UC3);
cvCvtColor(&bayerSource, &rgbDest, CV_BayerBG2RGB);
ho pensato che stavo correndo oltre la fine del sourceBuffer, dal momento che i dati di input è 12-bit, e ho dovuto passare in un tipo a 16 bit perché OpenCV non ha un tipo a 12 bit. Quindi ho diviso la larghezza e l'altezza per 2, ma cvCvtColor ha comunque generato un'eccezione che non conteneva alcuna informazione utile (il messaggio di errore era "Eccezione sconosciuta").
C'è stato un similar question pubblicato qualche mese fa a cui non è mai stata data risposta, ma poiché la mia domanda riguarda in modo più specifico i dati Bayer a 12 bit, ho pensato che fosse sufficientemente distinto per meritare una nuova domanda.
Grazie in anticipo.
Edit: Devo mancare qualcosa, perché non posso anche ottenere la funzione cvCvtColor di lavorare su dati a 8-bit:
cv::Mat srcMat(100, 100, CV_8UC3);
const cv::Scalar val(255,0,0);
srcMat.setTo(val);
cv::Mat destMat(100, 100, CV_8UC3);
cvCvtColor(&srcMat, &destMat, CV_RGB2BGR);
Così si scopre che io * * è stato manca qualcosa. Il mio collega ha sottolineato che stavo mescolando le chiamate C e C++. Modifica dell'ultima riga su cv :: cvtColor (srcMat, destMat, CV_RGB2BGR); ha reso tutto funziona come un fascino. Sto ancora lavorando al problema originale della conversione dei dati Bayer a 16 bit in dati RGB a 8 bit, quindi pubblicherò un aggiornamento se trovo la risposta. – Gillfish
'cvCvtColor' appartiene alla vecchia API C OpenCV, ma' cv :: Mat' è una classe dell'API C++. Mescolarli non è una buona idea e faresti meglio ad usare solo una versione dell'API. 'cv :: cvtColor (srcMat, dstMat, COLOR_RGB2BGR)' dovrebbe funzionare per te. –
"Effetto filtro verde" probabilmente significa che hai specificato il modello Bayer sbagliato. Provali tutti. – user3443369