У меня проблема с синтаксическим анализом данных изображения из фреймграббера в формат OpenCV Mat. Я могу получить данные изображения из моего фреймграббера EDT в виде беззнакового указателя char и передать его во вновь созданный Mat, но я теряю ценные данные в процессе и не знаю, как это исправить.
Моя камера - это инфракрасная камера, которая выводит 12-битное изображение Байера 320x256. Я вполне уверен, что использую API EDT правильно. Используя программное обеспечение EDT, «pdvshow», я могу просматривать данные изображения, как и ожидалось, но когда я конвертирую возвращенный кадр из API EDT в мат OpenCV и отображаю его, я теряю значительный объем данных. Когда у меня мат установлен на CV16UC1, рамка почти черная, когда мат установлен на CV8UC1, рамка отображает большую часть данных, но выглядит очень зернистой, а некоторые пятна полностью размыты. Я знаю, что фрейм-граббер хранит каждый 12-битный пиксель в двух байтах, и данные соответствуют MSB. GetStride возвращает 0.
unsigned char *pdvImage;
pdvImage = pdv_image(pdv_p);
cv::Mat freshFrame;
freshFrame = cv::Mat(GetHeight(), GetWidth(), CV_16UC1, pdvImage, GetStride()); //was CV_16UC1 but 8UC1 shows more data
return freshFrame.clone();