Emgu 距离变换

来源:互联网 发布:mysql的存储过程实例 编辑:程序博客网 时间:2024/05/20 14:23
函数:public static void cvDistTransform(IntPtr src,IntPtr dst,DIST_TYPE distanceType,int maskSize,float[] userMask,IntPtr labels)

应用:

  private void distanceTransform(object sender, EventArgs e)        {            if (this.ActiveMdiChild != null)            {                imgForm curWid = (imgForm)this.ActiveMdiChild;                                Image<Emgu.CV.Structure.Bgr, byte> img = curWid.CurImage;                Image<Gray, byte> gray = img.Convert<Gray, byte>();                CvInvoke.cvCanny(gray, gray, 100, 200, 3);                for (int i = 0; i < gray.Height; i++)                {                    for (int j = 0; j < gray.Width; j++)                    {                        gray.Data[i, j, 0] = Convert.ToByte(255 - gray.Data[i, j, 0]);                    }                }                                Image<Gray, byte> result = new Image<Gray, byte>(gray.Width, gray.Height);                      CvInvoke.cvDistTransform(gray,result, Emgu.CV.CvEnum.DIST_TYPE.CV_DIST_L1, 3, null, IntPtr.Zero);                              CvInvoke.cvShowImage("Test", result);              CvInvoke.cvShowImage("binary", gray);                     }                    }

当使用其他距离时,要求目标图像为32位图

IntPtr dst = CvInvoke.cvCreateImage(CvInvoke.cvGetSize(src), Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_32F, 1);CvInvoke.cvDistTransform(src, dst, Emgu.CV.CvEnum.DIST_TYPE.CV_DIST_L2, 5, null, IntPtr.Zero);

效果图:

PS:

emguCV里边,将特征点赋值为0,非特征点为1,而在matlab里边,则恰好相反。

I=imread('D:\公共图片库\1.jpg');g=rgb2gray(I);g=edge(g,'canny');d=bwdist(g,'euclidean');subplot(121),imshow(mat2gray(d));subplot(122),imshow(g);


原创粉丝点击