【发布时间】:2017-10-23 13:28:55
【问题描述】:
我正在尝试使用 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
我在中值滤波器上尝试了其他几个不同大小和不同内核大小的图像。结果都一样。
关于我做错了什么有什么想法吗?
【问题讨论】:
-
我认为这是因为您将图像读取为 RGB -> 即 3 个通道,并在创建中值滤波器函数时使用 CV_8UC1 -> 即 1 个通道....因此它将处理 1 /3 的图像...你应该先将其转换为灰度或加载它 0 而不是 1,也许我错了,我没有使用那么多 OpenCV 的 CUDA 模块
-
@api55... 这是观察到问题的正确原因。请添加您的评论作为答案,以便将问题标记为已解决。