機器視覺OpenCVSharp-邊緣輪廓的檢測/查找
CV2.Canny();CV2.FindContours()
public?staticMat?FindContours(Mat?srcImage)
?????{???
???????Mat?src_gray =?newMat();
???????CV2.CvtColor(srcImage,src_gray,?ColorConversionCodes.RGB2GRAY);//轉(zhuǎn)換為灰度圖
???????CV2.Blur(src_gray,src_gray,?new?OpenCvSharp.Size(2, 2));?????//濾波
???????Mat?canny_Image =?newMat();
???????CV2.Canny(src_gray,canny_Image, 100, 200);??????//Canny邊緣檢測
? ? ? ? ?OpenCvSharp.Point[][] contours;
???????HierarchyIndex[] hierarchly;
???????CV2.FindContours(canny_Image,out?contours,?out?hierarchly,RetrievalModes.Tree,ContourApproximationModes.ApproxSimple,?newOpenCvSharp.Point(0, 0));???//獲得輪廓??
? ? ? ? ?Mat?dst_Image =?Mat.Zeros(canny_Image.Size(),srcImage.Type());
? ? ? ? ?Random?rnd =?newRandom();
???????for?(int?i = 0; i <contours.Length; i++)
? ? ? ? ?{
?????????Scalar?color =?newScalar(rnd.Next(0,255), rnd.Next(0,255), rnd.Next(0,255));
?????????CV2.DrawContours(dst_Image, contours, i, color, 2,LineTypes.Link8,hierarchly);???????//畫出輪廓
? ? ? ? ?}
???????return?dst_Image;???//返回結(jié)果
???????//returncanny_Image;???
??????}
?private?void?button20_Click(object?sender,?EventArgs?e)
??????{
???????Mat?srcImage =?CV2.ImRead(@"D:\Users\FengJianming\C# \OpenCVSharp\OpenCVSharp\logo.jpg");?????//讀取原始圖?
???????Mat?dst_Image =FindContours(srcImage);????//調(diào)用輪廓查找函數(shù)
???????//Mat canny_Image =FindContours(srcImage);
???????CV2.ImShow("原始圖:", srcImage);
???????CV2.ImShow("輪廓圖", dst_Image);
???????//CV2.ImShow("CannyImage",canny_Image);