C# 如何从图像中的特定颜色中找到像素数?

C# 如何从图像中的特定颜色中找到像素数?,c#,colors,C#,Colors,因此,我正在尝试制作一个程序,可以找到一种特定颜色的像素数量。这些图像是用相机拍摄的,然后在photoshop上标记一些区域,我需要找到这些像素的确切数量。但我没有什么问题。 我使用的是getPixel(x,y),但是我比较的是我想要的颜色。。。我的第一个问题是,颜色有点不同,例如,我想找出颜色 RGB 116110,40但是当你在photoshop上用这种颜色画图时,一些像素会得到一点不同的颜色,比如RGB 115108,38(和其他类似的颜色),我也想包括这一点。所以我终于想出了这段代码(但

因此,我正在尝试制作一个程序,可以找到一种特定颜色的像素数量。这些图像是用相机拍摄的,然后在photoshop上标记一些区域,我需要找到这些像素的确切数量。但我没有什么问题。 我使用的是getPixel(x,y),但是我比较的是我想要的颜色。。。我的第一个问题是,颜色有点不同,例如,我想找出颜色 RGB 116110,40但是当你在photoshop上用这种颜色画图时,一些像素会得到一点不同的颜色,比如RGB 115108,38(和其他类似的颜色),我也想包括这一点。所以我终于想出了这段代码(但看起来id现在工作正常):

public Form1()
{
初始化组件();
}
位图图像1;
整数计数=0;
红色、绿色、蓝色;
国际红色、绿色、蓝色;
双肾;
私有无效按钮1\u单击(对象发送者,事件参数e)
{
尝试
{
红色=int.Parse(textBox1.Text);
绿色=int.Parse(textBox2.Text);
蓝色=int.Parse(textBox3.Text);
//检索图像。
image1=新位图(@“C:\bg img.jpg”,true);
双宽,高,像素;
int x,y;
Show(pixel.ToString());
//循环浏览图像像素
对于(x=0;x=redt)和&(red-10>=redt))//我使用+-10试图解决我写的关于闭合颜色的问题
{
如果((绿色+10>=绿色)和&(绿色-10>=绿色))
{
如果((蓝色+10>=蓝色)和&(蓝色-10>=蓝色))
{
计数+=1;
}
}
}
}
}
pictureBox1.Image=image1;
Show(“Imashe”+count.ToString());
计数=0;
}
捕获(异常)
{
Show(“出现错误。”+
“检查图像文件的路径。”);
}
}

问题是我没有得到我期望的结果。例如,当我必须得到大约1000个像素时,我得到的或多或少,我找不到哪里是我的错误。所以如果有人能告诉我我做错了什么。感谢您提前提供的所有帮助。

请尝试使用此循环:

int epsilon = 10;

for (x = 0; x < image1.Width; ++x)
{
    for (y = 0; y < image1.Height; ++y)
    {
        Color pixelColor = image1.GetPixel(x, y);
        redt = pixelColor.R;
        greent = pixelColor.G;
        bluet = pixelColor.B;

        if (Math.Abs(redt   - red)   <= epsilon &&
            Math.Abs(greent - green) <= epsilon &&
            Math.Abs(bluet  - blue)  <= epsilon)
        {
            ++ count;
        }
    }
}
intε=10;
对于(x=0;x
if ((green + 10 >= greent) && (green - 10 >= greent))
如果
(a-10>=b)
,那么一定要
(a+10>=b)
。看看你是否能理解原因

我想你是说

if ((green - 10 <= greent) && (greent <= green + 10))

if((绿色-10我认为您的颜色比较不正确。您尝试将
=
混合在颜色范围内。请尝试以下操作:

if ((red+10 >= redt) && (red-10 <= redt)) //i used +-10 in attempt to resolve the problem that i have writed about the close colours
{
    if ((green + 10 >= greent) && (green - 10 <= greent))
    {
        if ((blue + 10 >= bluet) && (blue - 10 <= bluet))
        {
           count += 1;
        }
    }
}

if((红色+10>=redt)和&(红色-10=绿色)和&(绿色-10=蓝色)和(蓝色-10非常感谢你们的帮助!!!我开始觉得我快疯了哈哈…它昨天工作了,现在在几次更改后停止了…再次感谢你们的帮助!!!太好了,我们可以提供帮助。请记住选择一个答案,并将其作为您接受的解决方案。我在我的博客上发布了一个示例,将重新发布urn指定颜色图像中每个像素的位置。仅供记录:如果(a+10>=b),我会重新阅读您的回复和声明,然后确定(a-10>=b)。看看您是否能理解原因。是错误的。例如:
a=0,b=5:0+10是>=5,0-10不是>=5
我想您的意思是:如果
(a-10>=b)
那么肯定
(a+10>=b)
if ((red+10 >= redt) && (red-10 <= redt)) //i used +-10 in attempt to resolve the problem that i have writed about the close colours
{
    if ((green + 10 >= greent) && (green - 10 <= greent))
    {
        if ((blue + 10 >= bluet) && (blue - 10 <= bluet))
        {
           count += 1;
        }
    }
}