C# 查找图像某些区域内的黑色块的坐标值
在一个100*900的24位彩色图像的区域内,有不定数量的长宽已知的黑色块,如何通过程序的方式识别出来,并将开始点的坐标记录下来。最好是有源代码!小弟也是第一次接触用C#...
在一个100*900的24位彩色图像的区域内,有不定数量的长宽已知的黑色块,如何通过程序的方式识别出来,并将开始点的坐标记录下来。
最好是有源代码!小弟也是第一次接触用C#来处理图像。
万分感谢 ,谢谢!
色块之间是不会有重叠的,是分开有一定的距离。 展开
最好是有源代码!小弟也是第一次接触用C#来处理图像。
万分感谢 ,谢谢!
色块之间是不会有重叠的,是分开有一定的距离。 展开
展开全部
软糖花了好长时间才弄好,主要是Color之间不能直接比较,要先转化ToArgb()。
坐标从 矩形集合[n].X ,矩形集合[n].Y 中获取。
如果有重叠部分,可能会不准确,有时候多一块,未能排除此BUG
窗体上有两个控件 picturebox1,位于顶部 width = 900 height= 100
button1有个click事件用来演示搜索。
上代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int 色块宽=10;
int 色块高=10;
Random rnd = new Random();
Color black = Color.Black;
Brush brush;
Bitmap 图像;
List<Rectangle> 矩形集合 = new List<Rectangle>();
private void 搜索色块()
{
int ARGB值 = black.ToArgb();
for (int x = 0; x < 900; x++)
{
for (int y = 0; y < 100; y++)
{
bool b = false;
//如果坐标X,Y不在任何集合中的矩形范围内,在进行判断
foreach (var rect in 矩形集合)
{
if (rect.Contains(x, y)) { b = true; }
}
if (b == false)
{
//取色,并转化为ARGB值比较,如果是黑色,就把这个矩形加入列表
//Color比较还要比对颜色名称,即使ARGB分量完全相同,颜色名称不同比较结果也是不等。
if (图像.GetPixel(x, y).ToArgb() == ARGB值)
{ 矩形集合.Add(new Rectangle(x, y, 色块宽+1, 色块高+1)); }
}
}
}
//遍历矩形集合,获取坐标: 矩形集合[n].Location
button1.Text = string.Format("{0}",矩形集合.Count);
}
private void 绘制色块()
{
图像 = new Bitmap(900, 100);
brush = new SolidBrush(black);
Graphics g = Graphics.FromImage(图像);
for (int i = 1; i <= 19; i++)
{
int x = rnd.Next(1, 900 - 色块宽);
int y = rnd.Next(1, 100 - 色块高);
g.FillRectangle(brush, x, y, 色块宽, 色块高);
}
}
private void Form1_Click(object sender, EventArgs e)
{
绘制色块();
pictureBox1.Image = 图像;
}
private void button1_Click(object sender, EventArgs e)
{
搜索色块();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
如满意,请采纳,谢谢。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询