使用OpenCV搜索整个图像中的nxn像素

时间:2012-10-24 20:05:54

标签: opencv

如标题中所述,我试图找到迭代灰度图像并创建nxn内核以扫描像素值的最佳方法。主要目标是创建一个最小/最大过滤器,并将其扩展到自定义中值过滤器。

我已经为3x3创建了一个硬编码解决方案,但是很多代码并将其扩展到5x5将是一个痛苦的过程。

我想知道OpenCV是否有任何可以管理此类任务的功能?

可以minMaxLoc以某种方式与矩形蒙版一起使用吗?

编辑:我基本上想要的是

  1. 将rectangel从image复制到subImage
  2. 确定/分析subImage中的像素的最小值或最大值。
  3. 编辑(测试):

        for(int y = 1; y < image.rows - 1; y++) {
            for(int x = 1; x < image.cols - 1; x++) {
                if(int(image.at<uchar>(x,y)) == 0) {
                    double maxValue = 0;
                    Rect roi(y-1,x-1,3,3);
                    Mat image_roi = image(roi);
                    minMaxLoc(image_roi, NULL, &maxValue, NULL, NULL);
                    if (maxValue > 0) {
                        image_new.at<uchar>(x,y) = uchar(maxValue);
                    }
                }
            }
        }
    

1 个答案:

答案 0 :(得分:1)

在C ++ API中定义感兴趣的矩形区域非常容易。

cv::Mat subImage = image(cv::Rect(upper_left_x,upper_left_y,ROI_width,ROI_height));

应该允许您根据需要处理subImage

如果您需要的是中值滤波器,OpenCV也具有该功能:

cv::medianBlur(image, outputImage, n);

用于nxn过滤器。有关此功能的更多文档可以在我上面第一条评论的链接中找到。