我一直在试图弄清楚如何使用 opencv 去马赛克功能。我安装了 OpenCV 4.4.0 并编译了 CUDA 支持,到目前为止,我认为我需要做的是:
- 读入原始图像数据
- 将原始图像数据加载到 Mat 对象
- 将 Mat 数据上传到 GpuMat(主机到设备上传)
- 德马赛克
- 将 GpuMat 数据(设备到主机下载)下载到 Mat 对象
- 显示或写出结果
这是我拥有的代码片段。
ifstream ifs("image.raw", ios_base::binary);
ifs.read(buffer, length);
// snip ...buffer contains the entire file...
Mat src_host(6464, 4860, CV_16UC1, buffer);
GpuMat dst, src;
src.upload(src_host);
// Debayer here
cv::cuda::demosaicing(src, dst, COLOR_BayerRG2BGR);
// have a look
Mat result_host;
dst.download(result_host);
namedWindow("Debayered Image", WINDOW_KEEPRATIO);
resizeWindow("Debayered Image", 6464/5, 4860/5);
imshow("Debayered Image", result_host);
waitKey(0);
我有来自每像素 12 位、RGGB、尺寸 6464 x 4860 的相机的原始帧。我不确定如何在宽度和高度方面为 OpenCV 指定这个,给它什么 CV_TYPE,我是否正在阅读和正确上传数据以进行去马赛克,为去马赛克提供什么颜色代码,以及如何下载结果以显示并保存到文件(最好是编写 png 或类似文件的高级例程)。
有谁知道我是否在正确的轨道上?
谢谢!詹姆士