我被困在试图找出如何使用opencv解禁功能。我已经安装了带有CUDA支持的OpenCV 4.4.0,到目前为止,我认为我需要做的是:
upload)
下面是我的代码片段。
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或类似的高级例程)。
有人知道我是否走对了路吗?
谢谢!詹姆斯
发布于 2020-09-09 22:53:01
是的,我走在正确的轨道上。行和列被意外交换,因此更正的代码是:
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位内,这使得处理起来容易得多。
https://stackoverflow.com/questions/63787099
复制相似问题