【问题标题】:Calculate the distribution of color across an image in OpenCV在 OpenCV 中计算图像的颜色分布
【发布时间】:2016-07-30 18:26:33
【问题描述】:

假设我们有一张灰度图像。有没有办法计算非黑色像素是如何分布的,即它们是在一个或几个地方分组,还是在整个图像中均匀分布?

【问题讨论】:

    标签: opencv colors distribution


    【解决方案1】:

    听起来您正在寻找图像的直方图。它是图像处理中的基本操作。

    "直方图是收集的数据计数,组织到一组预定义的 bin 中。"

    使用OpenCV计算直方图的文档在this link

    【讨论】:

      【解决方案2】:

      听起来您正在寻找的是图像栅格化版本的空间时刻。

      首先,您需要对图像进行阈值处理以使其成为二进制: http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold#threshold

      然后您可以计算图像矩: http://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=moments#moments

      如果您想要空间矩的物理类比,您可以想象每个白色像素是一个单位点质量,那么第二个矩就是图像的转动惯量。如果白色像素(点块)紧密聚集,那么二阶矩会很低(图像很容易旋转)。

      【讨论】:

        【解决方案3】:

        我想分享我使用过的另一种方法。

        Mat img = imread(argv[1], CV_LOAD_IMAGE_COLOR);
        cvtColor(img, img, CV_RGB2GRAY);
        threshold(img, img, 35, 255, THRESH_BINARY);
        
        Mat distance;
        distanceTransform(img, distance, CV_DIST_L2, 3);
        distance = min(distance, 1);
        Scalar distribution = mean(dist);
        
        cout <<  "The distribution is: " << distribution << std::endl;
        

        棘手的部分是distanceTransformmin 函数的组合。 min 函数对分布较好的图像影响较小,均值较大。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-25
          • 2015-12-15
          • 1970-01-01
          • 1970-01-01
          • 2012-07-07
          • 2011-10-28
          • 2011-07-06
          相关资源
          最近更新 更多