C#-查找像素的颜色

C#-查找像素的颜色,c#,C#,我试图用HSV计算颜色(黄色、蓝色、绿色、红色),但效果不好,因为如果光线较低,图像会更蓝,并且会给我每种颜色蓝色,因为色调值接近蓝色 我还试图找到黑色如果RGB的平均值有一个小的变化,如果值都小于150,则为黑色 Color obter_cor_pixel = frame_drone.Bitmap.GetPixel((int)ponto_medio_x, (int)ponto_medio_y); //obtem cor do pixel no ponto méd

我试图用HSV计算颜色(黄色、蓝色、绿色、红色),但效果不好,因为如果光线较低,图像会更蓝,并且会给我每种颜色蓝色,因为色调值接近蓝色

我还试图找到黑色如果RGB的平均值有一个小的变化,如果值都小于150,则为黑色

                Color obter_cor_pixel = frame_drone.Bitmap.GetPixel((int)ponto_medio_x, (int)ponto_medio_y); //obtem cor do pixel no ponto médio
                                                                                                             //RGB para HSV                 

                Color obter_cor_circulo = frame_drone.Bitmap.GetPixel((int)ponto_medio_circulo.X, (int)ponto_medio_circulo.Y); //obtem cor do pixel no ponto médio
                                                                                                                               //RGB para HSV


                var media_obter_cor_circulo = (obter_cor_circulo.B + obter_cor_circulo.G + obter_cor_circulo.R) / 3;
                int variacao = 25;
                int valor_min = 150;
                if (((media_obter_cor_circulo - variacao <= obter_cor_circulo.B) && (media_obter_cor_circulo + variacao > obter_cor_circulo.B) &&
                    (media_obter_cor_circulo - variacao <= obter_cor_circulo.G) && (media_obter_cor_circulo + variacao > obter_cor_circulo.G) &&
                    (media_obter_cor_circulo - variacao <= obter_cor_circulo.R) && (media_obter_cor_circulo + variacao > obter_cor_circulo.R)) && (obter_cor_circulo.R <= valor_min) && (obter_cor_circulo.G <= valor_min) && (obter_cor_circulo.B <= valor_min))
                {

                    circulo_encontrado++;
                }


                float hue = obter_cor_pixel.GetHue();

                if (hue > 190 && hue < 280 /*&& hue2 > 170 && hue2 < 280*/)
                {
                    //frame_drone.Draw("Azul", ref f, new System.Drawing.Point((int)ponto_medio_x, (int)ponto_medio_y), new Bgr(Color.White)); //Escrever na imagem a cor no ponto medio                                                                                    
                    cores_dos_pontos_medios[incrementa_ponto_medio] = "Azul";
                }
                else if (hue > 70 && hue < 190 /*&& hue2 > 70 && hue2 < 170*/)
                {
                    //frame_drone.Draw("Verde", ref f, new System.Drawing.Point((int)ponto_medio_x, (int)ponto_medio_y), new Bgr(Color.White)); //Escrever na imagem a cor no ponto medio           
                    cores_dos_pontos_medios[incrementa_ponto_medio] = "Verde";
                }
                else if (hue >= 25 && hue <= 60 /*&& hue2 >= 25 && hue2 <= 60*/)
                {
                    //frame_drone.Draw("Amarelo", ref f, new System.Drawing.Point((int)ponto_medio_x, (int)ponto_medio_y), new Bgr(Color.White)); //Escrever na imagem a cor no ponto medio           
                    cores_dos_pontos_medios[incrementa_ponto_medio] = "Amarelo";
                }
                else if ((hue > 330 && hue <= 360) || hue > 0 && hue <= 20)
                {
                    //frame_drone.Draw("Vermelho", ref f, new System.Drawing.Point((int)ponto_medio_x, (int)ponto_medio_y), new Bgr(Color.White)); //Escrever na imagem a cor no ponto medio           
                    cores_dos_pontos_medios[incrementa_ponto_medio] = "Vermelho";
                }
Color obter\u cor\u pixel=frame\u done.Bitmap.GetPixel((int)ponto\u medio\u x,(int)ponto\u medio\u y)//obtem cor do pixel no ponto médio
//准高速列车
Color obter_cor_circulo=frame_done.Bitmap.GetPixel((int)ponto_medio_circulo.X,(int)ponto_medio_circulo.Y)//obtem cor do pixel no ponto médio
//准高速列车
var media_obter_cor_circulo=(obter_cor_circulo.B+obter_cor_circulo.G+obter_cor_circulo.R)/3;
内变量=25;
内部价值最小值=150;
if(((媒体相关循环-可变相关循环B)&&
(媒体广播循环-可变广播循环)&&
(媒体光圈-可变光圈光圈)和&(光圈光圈70和色调<190/*&&hue2>70和hue2<170*/)
{
//帧无人机绘图(“Verde”,参考f,新系统绘图点((int)ponto_medio_x,(int)ponto_medio_y),新Bgr(颜色。白色));//Escriver na图像a cor no ponto medio
cores_dos_ponto_medios[增量a_ponto_medio]=“Verde”;
}

否则,如果(色调>=25&&hue=25&&hue2 330&&hue 0&&hue,您可能需要查看更细粒度的配色方案。您可能需要通过a)识别蓝色色调和b)变换颜色来纠正蓝色色调。您知道是否有办法更改图像的色温吗?冷和热问题是这是一个每秒30帧的视频流。我需要灯光代码。我只需要知道它是蓝色、红色、黄色和绿色。如果光线完美,此代码工作正常。如果不是,它很容易改变颜色。然后你必须测量和调整校正。你可能想看看更细粒度的配色方案你可能需要通过a)识别蓝色调和b)改变颜色来纠正蓝色调。你知道有没有办法改变图像的色温?冷和热问题是这是一个每秒30帧的视频流。我需要灯光代码。我只需要知道它是蓝色、红色、黄色和绿色。如果光线完美,此代码工作正常。如果不是,它很容易改变颜色。然后你将不得不测量和调整校正。