使用OpenCV/EmguCV计算RGB图像的唯一颜色

使用OpenCV/EmguCV计算RGB图像的唯一颜色,opencv,colors,histogram,emgucv,Opencv,Colors,Histogram,Emgucv,如何计算图像ROI的独特颜色。 我尝试使用直方图,但我不知道如何处理Bin值。以下是我目前使用EMguCV的代码: image.ROI= new Rectangle(10,10,300,500); Image<Gray, Byte>[] gray = image.Split(); DenseHistogram hist = new DenseHistogram(256, new RangeF(0f, 256f)); hist.Calculate(new Image<Gray,

如何计算图像ROI的独特颜色。 我尝试使用直方图,但我不知道如何处理Bin值。以下是我目前使用EMguCV的代码:

image.ROI= new Rectangle(10,10,300,500);
Image<Gray, Byte>[] gray = image.Split(); 
DenseHistogram hist = new DenseHistogram(256, new RangeF(0f, 256f));
hist.Calculate(new Image<Gray, byte>[] { gray[0] }, false, null);
float[] r = hist.GetBinValues();
hist.Calculate(new Image<Gray, byte>[] { gray[1] }, false, null);
float[] g = hist.GetBinValues();
hist.Calculate(new Image<Gray, byte>[] { gray[2] }, false, null);
float[] b = hist.GetBinValues();
image.ROI=新矩形(10,10300500);
Image[]gray=Image.Split();
DenseShistogram hist=新的DenseShistogram(256,新范围f(0f,256f));
计算历史(新图像[]{gray[0]},false,null);
float[]r=hist.GetBinValues();
计算历史(新图像[]{gray[1]},false,null);
float[]g=hist.GetBinValues();
计算历史(新图像[]{gray[2]},false,null);
float[]b=hist.GetBinValues();

如何计算r、g、b值以获得所用颜色的数量

我不知道你是否会为此感到高兴。但蛮力方法是可行的

 Image<Bgr, byte> test = new Image<Bgr, byte>(@"C:\Lena.jpeg");
        List<Bgr> thePixelList = new List<Bgr>();
        for (int j = 0; j < test.Cols; j++)
        {
            for (int i = 0; i < test.Rows; i++)
            {                  
                thePixelList.Add(test[i, j]);

            }
        }


        int theCount = thePixelList.Distinct().Count();
Image test=新图像(@“C:\Lena.jpeg”);
列出像素列表=新列表();
对于(int j=0;j
谢谢你的建议,我也考虑过,但这种方法需要太多时间。当我阅读你的问题时,这是一个“选择不同”的问题。此外,正如我所记得的,“选择不同的”是一个NP难问题。因此,您需要两个步骤将数据复制到另一个数组(除非您想就地排序)-使用NP-Hard Distinct。我不知道你会怎么解决这个问题。是的,上面的循环看起来非常NP难。