Estoy tratando de usar OpenCV 2.3.1 para convertir una imagen Bayer de 12 bits en una imagen RGB de 8 bits. Esta parece que debería ser bastante sencillo de utilizar la función cvCvtColor, pero la función lanza una excepción cuando la llamo con este código:Convertir imagen Bayer de 12 bits a RGB de 8 bits usando 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);
pensé que estaba corriendo más allá del final de sourceBuffer, ya que los datos de entrada es de 12 bits, y tuve que pasar en un tipo de 16 bits porque OpenCV no tiene un tipo de 12 bits. Así que dividí el ancho y alto por 2, pero cvCvtColor arrojó una excepción que no tenía información útil (el mensaje de error fue "Excepción desconocida").
Hubo un similar question publicado hace unos meses que nunca fue respondido, pero dado que mi pregunta se refiere más específicamente a los datos de Bayer de 12 bits, pensé que era lo suficientemente distinto como para merecer una nueva pregunta.
Gracias de antemano.
Editar: Debo estar perdiendo algo, porque no puedo incluso conseguir la función cvCvtColor trabajar con los datos de 8 bits:
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);
Así resulta que I * * fue perdiendo algo. Mi colega señaló que estaba mezclando llamadas C y C++. Cambiar la última línea a cv :: cvtColor (srcMat, destMat, CV_RGB2BGR); hizo que todo funcionara como un amuleto. Todavía estoy trabajando en el problema original de convertir los datos de Bayer de 16 bits en datos RGB de 8 bits, por lo que publicaré una actualización si encuentro la respuesta a eso. – Gillfish
'cvCvtColor' pertenece a la antigua C OpenCV API, pero' cv :: Mat' es una clase de C++ API. Mezclarlos no es una buena idea y será mejor que uses solo una versión de API. 'cv :: cvtColor (srcMat, dstMat, COLOR_RGB2BGR)' debería funcionar para usted. –
La "apariencia del filtro verde" probablemente significa que ha especificado un patrón Bayer incorrecto. Pruébalos todos. – user3443369