首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用opencv进行去噪

用opencv进行去噪
EN

Stack Overflow用户
提问于 2020-09-08 04:25:00
回答 1查看 2.4K关注 0票数 0

我被困在试图找出如何使用opencv解禁功能。我已经安装了带有CUDA支持的OpenCV 4.4.0,到目前为止,我认为我需要做的是:

upload)

  • Demosaic

  • Download

  • 读取原始图像数据中的

  • ,将原始图像数据加载到Mat对象

  • 中,将Mat数据上传到GpuMat (主机到设备GpuMat ),GpuMat数据(主机下载设备)到Mat object

  • Display或写出结果

下面是我的代码片段。

代码语言:javascript
复制
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,维度6464x4860。我不确定如何为OpenCV指定宽度和高度,给它提供什么CV_TYPE,是否正确地读取和上传数据以进行去噪,如何下载结果以供显示和保存到文件中(最好是编写png或类似的高级例程)。

有人知道我是否走对了路吗?

谢谢!詹姆斯

EN

回答 1

Stack Overflow用户

发布于 2020-09-09 22:53:01

是的,我走在正确的轨道上。行和列被意外交换,因此更正的代码是:

代码语言:javascript
复制
ifstream ifs("image.raw", ios_base::binary);
ifs.read(buffer, length);
// snip ...buffer contains the entire file...

Mat src_host(4860, 6464, 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", 4860/2, 6464/2);
imshow("Debayered Image", result_host);
waitKey(0);

当传感器数据是12位时,每个12位都位于16位内,这使得处理起来容易得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63787099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档