gpt4 book ai didi

c++ - OpenCv 3.3 Cuda Medianfilter 生成 2/3 的图像黑色

转载 作者:太空狗 更新时间:2023-10-29 21:34:21 29 4
gpt4 key购买 nike

我正在尝试使用 OpenCV 库中的 cv::cuda::createMedianfilter 函数。

这个简单的代码生成一个 2/3 黑色的图像,只有 1/3 被过滤。

using namespace cv;
int main(int argc, char** argv)
{
Mat src; Mat dst;
src = imread("test.bmp", 1);
cuda::GpuMat imageGpu(src),imageGpuOut;
cuda::Stream stream;
try
{
Ptr<cuda::Filter> filterX = cuda::createMedianFilter(CV_8UC1, 31);
filterX->apply(imageGpu, imageGpuOut,stream);
imageGpuOut.download(dst,stream);
stream.waitForCompletion();
imwrite("test_cuda31.bmp", dst);
}
catch (cv::Exception& e)
{
const char* err_msg = e.what();
std::cout << "exception caught: " << err_msg << std::endl;
}
}

输入图像如下所示:Input image
输出图像如下所示:Output image

我在中值滤波器上尝试了其他几个不同尺寸和不同核尺寸的图像。结果都一样。

对我做错了什么有什么想法吗?

最佳答案

您正在加载 3 个 channel 的图像 (BGR)

src = imread("test.bmp", 1);

然后,您使用的就好像源只有一个 channel

Ptr<cuda::Filter> filterX = cuda::createMedianFilter(CV_8UC1, 31);

然后它将只处理 1/3 的像素,并且可能图像被初始化为全 0,因此图像其余部分为黑色像素。

遗憾的是,cuda::createMedianFilter 仅支持 CV_8UC1,因此无法更改它,但您可以将图像加载为 CV_8UC1

src = imread("test.bmp", 0);

或在加载后将其转换为灰度。

我希望这能解决你的问题

关于c++ - OpenCv 3.3 Cuda Medianfilter 生成 2/3 的图像黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46890591/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com