【发布时间】:2020-12-26 10:30:13
【问题描述】:
我一直在试图弄清楚如何使用 opencv 去马赛克功能。我安装了 OpenCV 4.4.0 并编译了 CUDA 支持,到目前为止,我认为我需要做的是:
- 读入原始图像数据
- 将原始图像数据加载到 Mat 对象中
- 将 Mat 数据上传到 GpuMat(主机到设备上传)
- 马赛克
- 将 GpuMat 数据(设备到主机下载)下载到 Mat 对象
- 显示或写出结果
这是我拥有的代码的 sn-p。
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,不管我是正确读取和上传数据以进行去马赛克,为去马赛克提供什么 COLOR_code,以及如何下载结果以显示并保存到文件(最好是编写 png 或类似文件的高级例程)。
有人知道我是否走在正确的轨道上吗?
谢谢!詹姆斯
【问题讨论】:
-
为什么你不直接定义
Mat src_host;而不是创建类型不正确的 1 通道 Mat ?另外,如果它引发错误,请分享它 -
我不知道我在做什么。我必须访问十几个网站才能走到这一步。没有抛出错误,结果只是一个黑色的图像。
标签: c++ opencv demosaicing