c++ - 使用高斯模糊和 Sobel 算子保留颜色

标签 c++ opencv image-processing

我想在图像上使用高斯模糊作为使用 sobel 边缘检测过滤器的预处理步骤。

我以前在灰度图像上有效地实现了 sobel 和高斯模糊运算符,但是,我从未尝试过在彩色图像上使用它们。

之前,我一直采用像素数据的红色分量,因为 RGB 在灰度中都是相同的。

我是否需要先将 RGB 图像转换为灰度图像?

如果不是,我如何将所有 3 个颜色 channel 与每个运算符的内核一起使用?

最佳答案

您可以将线性滤镜独立应用于每个颜色 channel 。高斯模糊和 Sobel 算子是线性滤波器。通常将三个 channel 分离为三个灰度值图像,并分别进行过滤,然后将三个结果合成为一个新的RGB图像。但是,如果您的软件允许在多 channel 图像上应用卷积,则您无需手动执行此过程。

请注意,应用高斯模糊然后使用 Sobel 算子来确定梯度是次优的。您最好使用高斯导数直接计算梯度。 Here is an old blog post of mine that describes Gaussian derivatives .简而言之,应用具有高斯导数的卷积(您可以通过分析和采样确定)产生平滑图像的精确导数。请注意,高斯是可分离的(它的导数也是可分离的),这意味着二维卷积可以作为两个一维卷积应用,从而节省大量计算。

关于c++ - 使用高斯模糊和 Sobel 算子保留颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45157153/

相关文章:

c++ 使用包含 <time.h> 和 <ctime> 的 time() - 哪个优先?

image - CvBOX2D处理

image-processing - 使用查找表的 OpenGL 图像变形

c++ - 使用 strtok_s 分割字符串

C++模板问题添加两种数据类型

c++ - 启动多个线程 - 实例化错误 (C++)

python - 获取错误 - 'could not find a writer' 同时提供 imshow,imwrite 命令 opencv

python - 通过PIP在opencv-python中没有最新的(4.3.0。)openCV库

python - 如何使用 python 从图像中去除边界边缘噪声?

image - 如何从 MATLAB 中的 JPEG 文件获取颜色图?