Opencv 使用Emgu CV从图像中查找最突出的颜色

Opencv 使用Emgu CV从图像中查找最突出的颜色,opencv,webcam,imaging,emgucv,Opencv,Webcam,Imaging,Emgucv,因此,我有一张脸的图像: 我需要能够使用Emgu CV从中确定最主要/突出的RGB和YCrCB值。谢谢您的帮助。您可以使用直方图查找颜色分布,并选择最高值作为主色。目前还不知道Emgu CV中的相关功能。祝您好运您可以使用直方图查找颜色的分布,并选择最高值作为主色。目前还不知道Emgu CV中的相关功能。祝你好运你应该首先得到每个颜色通道的直方图。然后您可以使用最小最大值函数来获得最主要的颜色 我发布的代码是针对HSV图像的,您可以更改颜色空间的频道名称 Image<Gray, Byt

因此,我有一张脸的图像:
我需要能够使用Emgu CV从中确定最主要/突出的RGB和YCrCB值。谢谢您的帮助。

您可以使用直方图查找颜色分布,并选择最高值作为主色。目前还不知道Emgu CV中的相关功能。祝您好运

您可以使用直方图查找颜色的分布,并选择最高值作为主色。目前还不知道Emgu CV中的相关功能。祝你好运

你应该首先得到每个颜色通道的直方图。然后您可以使用最小最大值函数来获得最主要的颜色

我发布的代码是针对HSV图像的,您可以更改颜色空间的频道名称

  Image<Gray, Byte>[] channels = hsv1.Split();
                Image<Gray, Byte> ImgHue = channels[0];
                Image<Gray, Byte> ImgSat = channels[1];
                Image<Gray, Byte> ImgVal = channels[2];

 DenseHistogram histo1 = new DenseHistogram(255, new RangeF(0, 255));

 histo1.Calculate<byte>(new Image<Gray, byte>[] { ImgHue }, true, null);

  float minV, maxV;
        int[] minL;
        int[] maxL;


 histo1.MinMax(out minV, out  maxV, out minL, out maxL);


 string mystr = Convert.ToString(maxL[0]);
                label1.Text = "Hue= " + mystr; 
Image[]channels=hsv1.Split();
图像ImgHue=通道[0];
图像ImgSat=通道[1];
图像ImgVal=通道[2];
DenseShistogram histor1=新的DenseShistogram(255,新的范围f(0255));
histor1.Calculate(新图像[]{ImgHue},true,null);
浮动最小值,最大值;
int[]minL;
int[]maxL;
历史1.MinMax(out minV,out maxV,out minL,out maxL);
字符串mystr=Convert.ToString(maxL[0]);
标签1.Text=“Hue=”+mystr;

您也可以对饱和度通道和值通道执行相同的操作。

您应该首先获得每个颜色通道的直方图。然后您可以使用最小最大值函数来获得最主要的颜色

我发布的代码是针对HSV图像的,您可以更改颜色空间的频道名称

  Image<Gray, Byte>[] channels = hsv1.Split();
                Image<Gray, Byte> ImgHue = channels[0];
                Image<Gray, Byte> ImgSat = channels[1];
                Image<Gray, Byte> ImgVal = channels[2];

 DenseHistogram histo1 = new DenseHistogram(255, new RangeF(0, 255));

 histo1.Calculate<byte>(new Image<Gray, byte>[] { ImgHue }, true, null);

  float minV, maxV;
        int[] minL;
        int[] maxL;


 histo1.MinMax(out minV, out  maxV, out minL, out maxL);


 string mystr = Convert.ToString(maxL[0]);
                label1.Text = "Hue= " + mystr; 
Image[]channels=hsv1.Split();
图像ImgHue=通道[0];
图像ImgSat=通道[1];
图像ImgVal=通道[2];
DenseShistogram histor1=新的DenseShistogram(255,新的范围f(0255));
histor1.Calculate(新图像[]{ImgHue},true,null);
浮动最小值,最大值;
int[]minL;
int[]maxL;
历史1.MinMax(out minV,out maxV,out minL,out maxL);
字符串mystr=Convert.ToString(maxL[0]);
标签1.Text=“Hue=”+mystr;
您也可以对饱和度和值通道执行相同的操作