一张图片请教:1。根据一个黑点或一个字母检测到这个黑点或字母。2。得到这个点的x和y值。

解决方案 »

  1.   

    首先对图像进行锐化,使边缘突出,然后进行二值化。用光栅发进行边缘检测
     我这里给你贴写源码 你自己试试
    <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>
      

  2.   

    如果自己写的话,没有别的,只能遍历每一个像素。不过搂主可以下载一个OCR软件或者组件,然后看看有没接口可以调用,自己写,算法太复杂