想判斷一個圖片中是否有紅色 那應該如何寫呢 菜鳥 有沒有代碼可以給我看看
uj5u.com熱心網友回復:
你用Marshal.Copy把影像RGB 數值copy到一個陣列里面,然后判斷R的值,如果有等于255的就是紅色。uj5u.com熱心網友回復:
像樓上說的把圖片的值讀出來,然后回圈判斷這些值是否存在255uj5u.com熱心網友回復:
bmp.GetPixel(x, y)得到顏色,判斷是否有r=255,g=0,b=0的點uj5u.com熱心網友回復:
樓主問的不太嚴謹,255 0 0確實是紅,但你敢說254 0 0 不算紅嗎?組合下來有成百上千種紅,只是我們肉眼看不出來而已,
除非樓主能說服客戶,255 0 0才是紅,254 0 0 不算紅 ,



uj5u.com熱心網友回復:
大漠插件~~uj5u.com熱心網友回復:
順帶答一下這個顏色是一個線性空間,“紅色”也是一個線性空間
bmp.GetPixel(x, y)得到顏色,映射到線性空間,可以范圍過濾掉
uj5u.com熱心網友回復:
通行的識別方式1.二值化操作,把3分量降維到一分量的線性空間
2. 濾波識別
https://blog.csdn.net/qq_44833786/article/details/90138769
這個隨然是vc的代碼,不過opencv C#也可以用,手段是一致的,翻譯過來問題不大
uj5u.com熱心網友回復:
在 WPF 中獲取和修改圖片顏色請看 WPF 修改圖片顏色uj5u.com熱心網友回復:
private void button1_Click(object sender, EventArgs e)
{
bool tmp = GetRGB(Image.FromFile("a.png") as Bitmap, 237, 28, 36); //顏色rgb為:(237, 28, 36)
if (tmp) MessageBox.Show("有");
else MessageBox.Show("沒有");
}
/// <summary>
/// 有沒有指定顏色
/// </summary>
/// <param name="src">影像</param>
/// <param name="tr">r值</param>
/// <param name="tg">g值</param>
/// <param name="tb">b值</param>
/// <returns></returns>
public bool GetRGB(Bitmap src, int tr, int tg, int tb)
{
bool has = false;
int w = src.Width;
int h = src.Height;
System.Drawing.Imaging.BitmapData srcData = src.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
unsafe
{
byte* pIn = (byte*)srcData.Scan0.ToPointer();
byte* p;
int stride = srcData.Stride;
int r, g, b;
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
p = pIn;
b = pIn[0];
g = pIn[1];
r = pIn[2];
if (r == tr && g == tg && b == tb) { has = true; break; }
pIn += 4;
}
pIn += srcData.Stride - w * 4;
}
}
src.UnlockBits(srcData);
return has;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/52403.html
標籤:C#
