计算OpenCV中图像的颜色分布

计算OpenCV中图像的颜色分布,opencv,colors,distribution,Opencv,Colors,Distribution,假设我们有一个灰度图像。有没有办法计算非黑色像素是如何分布的,即它们是在一个或几个地方分组的,还是在整个图像中均匀分布的?听起来像是在寻找图像的直方图。这是图像处理中的一项基本操作 “直方图是收集到的数据计数,组织到一组预定义的存储箱中。” 使用OpenCV计算直方图的文档位于中,听起来像是在寻找图像的直方图。这是图像处理中的一项基本操作 “直方图是收集到的数据计数,组织到一组预定义的存储箱中。” 使用OpenCV计算直方图的文档位于中,听起来您要查找的是光栅化版本图像的空间矩 首先,您需要设置

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

听起来像是在寻找图像的直方图。这是图像处理中的一项基本操作

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


使用OpenCV计算直方图的文档位于

中,听起来像是在寻找图像的直方图。这是图像处理中的一项基本操作

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


使用OpenCV计算直方图的文档位于

中,听起来您要查找的是光栅化版本图像的空间矩

首先,您需要设置图像阈值,使其成为二进制图像:

然后可以计算图像力矩:


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

听起来您要寻找的是光栅化图像的空间时刻

首先,您需要设置图像阈值,使其成为二进制图像:

然后可以计算图像力矩:


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

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

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;
Mat img=imread(argv[1],CV\u LOAD\u IMAGE\u COLOR);
CVT颜色(img、img、CV_RGB2GRAY);
阈值(img,img,35255,THRESH_二进制);
垫距;
距离变换(img,距离,CV_距离_L2,3);
距离=最小值(距离,1);
标量分布=平均值(距离);

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

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;
Mat img=imread(argv[1],CV\u LOAD\u IMAGE\u COLOR);
CVT颜色(img、img、CV_RGB2GRAY);
阈值(img,img,35255,THRESH_二进制);
垫距;
距离变换(img,距离,CV_距离_L2,3);
距离=最小值(距离,1);
标量分布=平均值(距离);
库特