winforms:得到图像的xy值 一张图片请教:1。根据一个黑点或一个字母检测到这个黑点或字母。2。得到这个点的x和y值。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先对图像进行锐化,使边缘突出,然后进行二值化。用光栅发进行边缘检测 我这里给你贴写源码 你自己试试<code= c#> private void 边缘跟踪ToolStripMenuItem_Click(object sender, EventArgs e) { short[, ,] QiDian = new short[openImg_Info.i_bands, openImg_Info.i_lines + 2, openImg_Info.i_samples + 2]; for (int i = 0; i < openImg_Info.i_bands; i++) { for (int j = 0; j < openImg_Info.i_lines; j++) { for (int k = 0; k < openImg_Info.i_samples; k++) { if (pixel[i][j][k] >= 200) { QiDian[i, j, k] = 1; if (j + 1 < openImg_Info.i_lines && k - 1 >= 0 && Math.Abs(pixel[i][j][k] - pixel[i][j + 1][k - 1]) <= 50) { QiDian[i, j + 1, k - 1] = 1; } if (j + 1 < openImg_Info.i_lines && Math.Abs(pixel[i][j][k] - pixel[i][j + 1][k]) <= 50) { QiDian[i, j + 1, k] = 1; } if (j + 1 < openImg_Info.i_lines && k + 1 < openImg_Info.i_samples && Math.Abs(pixel[i][j][k] - pixel[i][j + 1][k + 1]) <= 50) { QiDian[i, j + 1, k + 1] = 1; } } else _pixel[i][j][k] = 0;////未处理区域设为黑色 } } } for (int i1 = 0; i1 < openImg_Info.i_bands; i1++) { for (int j1= 0; j1 < openImg_Info.i_lines; j1++) { for (int k1 = 0; k1< openImg_Info.i_samples; k1++) { if (QiDian[i1, j1, k1] == 1) { _pixel[i1][j1][k1] = 255; } else _pixel[i1][j1][k1] = 0; } } //设置图像显示波段 display_rgb.r = 0; display_rgb.g = 1; display_rgb.b = 2; pictureBox2.Image = DrawPic(_pixel, display_rgb, false); //在第二个像框显示图像 } }</code> 如果自己写的话,没有别的,只能遍历每一个像素。不过搂主可以下载一个OCR软件或者组件,然后看看有没接口可以调用,自己写,算法太复杂 C# TcpListener多线程问题 关于随机函数 【C#】可访问性不一致: 参数类型比委托的访问性低 C#remoting 消息接收器的定制问题,急!!! 求下载功能代码 请问在何处处理弹出对话框的按扭事件?? 一个简单简单的问题!!! 怎么限制只程序只能运行一次 实在受不了,整天呼吁捐款,看了这个帖子如果你还要为印尼捐款,那真是.......(一) C# 关于DataView.RowFilter属性的问题 急求:c# StatusStrip 通过什么方式显示进度? c#调用以前的Dll问题,请前辈帮小弟看下代码,小弟先感谢了!
我这里给你贴写源码 你自己试试
<code= c#>
private void 边缘跟踪ToolStripMenuItem_Click(object sender, EventArgs e)
{
short[, ,] QiDian = new short[openImg_Info.i_bands, openImg_Info.i_lines + 2, openImg_Info.i_samples + 2];
for (int i = 0; i < openImg_Info.i_bands; i++)
{
for (int j = 0; j < openImg_Info.i_lines; j++)
{
for (int k = 0; k < openImg_Info.i_samples; k++)
{
if (pixel[i][j][k] >= 200)
{
QiDian[i, j, k] = 1;
if (j + 1 < openImg_Info.i_lines && k - 1 >= 0 && Math.Abs(pixel[i][j][k] - pixel[i][j + 1][k - 1]) <= 50)
{
QiDian[i, j + 1, k - 1] = 1;
}
if (j + 1 < openImg_Info.i_lines && Math.Abs(pixel[i][j][k] - pixel[i][j + 1][k]) <= 50)
{
QiDian[i, j + 1, k] = 1;
}
if (j + 1 < openImg_Info.i_lines && k + 1 < openImg_Info.i_samples && Math.Abs(pixel[i][j][k] - pixel[i][j + 1][k + 1]) <= 50)
{
QiDian[i, j + 1, k + 1] = 1;
}
}
else
_pixel[i][j][k] = 0;////未处理区域设为黑色
}
}
}
for (int i1 = 0; i1 < openImg_Info.i_bands; i1++)
{
for (int j1= 0; j1 < openImg_Info.i_lines; j1++)
{
for (int k1 = 0; k1< openImg_Info.i_samples; k1++)
{
if (QiDian[i1, j1, k1] == 1)
{
_pixel[i1][j1][k1] = 255;
}
else
_pixel[i1][j1][k1] = 0;
}
}
//设置图像显示波段
display_rgb.r = 0;
display_rgb.g = 1;
display_rgb.b = 2;
pictureBox2.Image = DrawPic(_pixel, display_rgb, false); //在第二个像框显示图像
}
}</code>