请高手们帮忙啊!!小弟正在用MFC编一个图像处理的程序,然后第一个遇到的困难就是 图像需要边缘检测,然后我自己写了一个程序,但是始终达不到预期的效果,下面就是边缘检测的部分代码,请高手指教。
 下面代码的大体意思就是,我把像素存到了 cImage 二维数组里面,然后找像素为0的点,然后判断这个点的周围8个点,然后如果符合条件的,就把那个点赋为 255.当然中间还用了一个临时的二维数组 bImage .希望那位高手指教一下我下面代码,或者是能提供别的MFC代码就更好了,小弟在这儿不胜感激!
for(y=1; y< Height-1;y++)
{
for(x=1; x< Width-1;x++)
{
if(cImage[y][x] == 0)
{
bImage[y][x]=0;
n1 = cImage[y-1][x-1];
n2 = cImage[y-1][x];
n3 = cImage[y-1][x+1];
n4 = cImage[y][x-1];
n5 = cImage[y][x+1];
n6 = cImage[y+1][x-1];
n7 = cImage[y+1][x];
n8 = cImage[y+1][x+1];

if(n1+n2+n3+n4+n5+n7+n8 == 0)
{
bImage[y][x] = 255; if(m_nBitCount == 16)
{
lIndex = ((Width * y) + x) * 2L;
*(_lpLastVHdr->lpData + lIndex) = bImage[y][x];
}
else if(m_nBitCount == 24)
{
lIndex = ((Width * y) + x) * 3L;
*(_lpLastVHdr->lpData + lIndex + 2) = bImage[y][x];
*(_lpLastVHdr->lpData + lIndex + 1) = bImage[y][x];
*(_lpLastVHdr->lpData + lIndex + 0) = bImage[y][x];
}
}
}
}
}

解决方案 »

  1.   

    Cximage中有边缘检测,参考一下吧。
      

  2.   


    不好意思啊,我是刚接触MFC 不知道你指的Cximage 这个是什么意思?在哪儿里可以看到,谢谢
      

  3.   

    lz开始的时候二值化了没有???不二值化的话,你的这个程序会有问题。
    关于边缘检测,我建议看一看Sobel一类的边缘检测算子
      

  4.   

    一个图像处理库,http://www.xdp.it/ 
      

  5.   

    cximage或者opencv里都有现成的边缘检测函数
    如opencv中的cvcanny,cvsobel等
    http://blog.csdn.net/fengbingchun/article/details/5816253
      

  6.   

    可以用opencv,现成的函数都用,调用一下很方便
      

  7.   

    [Quote=引用 2 楼 dapigu89 的回复:]引用 1 楼 cnf 的回复:
    Cximage中有边缘检测,参考一下吧。请问一下,CxImage中二值图边缘检测的函数是?能不能处理带洞的形状?
      

  8.   

    请问Cximage里的边缘检测函数是哪个?