/// <summary> /// Extracts MSER by C-style code (cvExtractMSER) /// </summary> /// <param name="imgGray"></param> /// <param name="imgRender"></param> private void CStyleMSER(IplImage imgGray, IplImage imgDst) { using (CvMemStorage storage = new CvMemStorage()) { CvContour[] contours; CvMSERParams param = new CvMSERParams(); Cv.ExtractMSER(imgGray, null, out contours, storage, param); foreach (CvContour c in contours) { CvColor color = CvColor.Random(); for (int i = 0; i < c.Total; i++) { imgDst.Circle(c[i].Value, 1, color); } } } }
/// <summary> /// MSERのすべての輪郭情報を抽出する /// </summary> /// <param name="img"></param> /// <param name="mask"></param> /// <param name="contours"></param> /// <param name="storage"></param> /// <param name="params"></param> #else /// <summary> /// Extracts the contours of Maximally Stable Extremal Regions /// </summary> /// <param name="img"></param> /// <param name="mask"></param> /// <param name="contours"></param> /// <param name="storage"></param> /// <param name="params"></param> #endif public static void ExtractMSER(CvArr img, CvArr mask, out CvContour[] contours, CvMemStorage storage, CvMSERParams @params) { if (img == null) throw new ArgumentNullException("img"); if (storage == null) throw new ArgumentNullException("storage"); IntPtr maskPtr = (mask == null) ? IntPtr.Zero : mask.CvPtr; IntPtr contoursPtr = IntPtr.Zero; CvInvoke.cvExtractMSER(img.CvPtr, maskPtr, ref contoursPtr, storage.CvPtr, @params.Struct); CvSeq<IntPtr> seq = new CvSeq<IntPtr>(contoursPtr); contours = Array.ConvertAll<IntPtr, CvContour>(seq.ToArray(), delegate(IntPtr p) { return new CvContour(p); }); }