国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

利用C#版OpenCV實現圓心求取實例代碼

2020-01-24 00:05:23
字體:
來源:轉載
供稿:網友

前言

OpenCVSharp是OpenCV的.NET wrapper,是一名日本工程師開發的,項目地址為:https://github.com/shimat/opencvsharp

該源碼是 BSD開放協議,BSD開源協議是一個給于使用者很大自由的協議。基本上使用者可以”為所欲為”,可以自由的使用,修改源代碼,也可以將修改后的代碼作為開源或者專有軟件再發布或商業化銷售。

1.OpenCVSharp的下載

可以直接從上面的github上下載源碼,自行編譯引用;

也可用vs中的nuget包管理器下載;

打開【工具】->【庫程序包管理器】->【管理解決方案的NuGet程序包】,在其中搜索OpenCVSharp,選擇合適的點擊【安裝】(最好安裝最新的)。一直等待完成。

我的環境是vs2017,下載之后最好直接拷貝OpenCVSharp系列dll到項目中引用即可。

2.擬合圓并求取圓心

本次舉例比較貼近實際,我們求如下原始圖片的中間部分圓的圓心,選取的圖片故意只留了一半:

源碼如下:

using OpenCvSharp;namespace SamplesWinform{  public class CircleFit   {    public void Run()    {      //讀取圖片      var img = Cv2.ImRead("Data/Image/c1.bmp");      //顯示圖片      //Cv2.ImShow("Input Image", img);            //轉換成灰度圖      Mat gray = img.CvtColor(ColorConversionCodes.BGR2GRAY);            //閾值二值化操作 閾值參數可以用一些可視化工具來調試得到      Mat ThresholdImg = gray.Threshold(11, 255, ThresholdTypes.Binary);      Cv2.ImShow("Threshold", ThresholdImg);      //降噪      //方法一:高斯變化      //Mat gaussImg= ThresholdImg.GaussianBlur(new Size(5, 5), 0.8);      //Cv2.ImShow("GaussianBlur", gaussImg);      //方法二:中值濾波降噪      Mat medianImg = ThresholdImg.MedianBlur(5);      Cv2.ImShow("MedianBlur", medianImg);      //方法三:膨脹+腐蝕      ////膨脹處理      //Mat kernel = new Mat(15, 15, MatType.CV_8UC1);      //Mat DilateImg = ThresholdImg.Dilate(kernel);      ////腐蝕處理      //Mat binary = DilateImg.Erode(kernel);      ////顯示中間結果      //Cv2.ImShow("Dilate & Erode", binary);      //設置感興趣的區域      int x = 150, y = 100, w = 294, h = 337;      Rect roi = new Rect(x, y, w, h);      Mat ROIimg = new Mat(medianImg, roi);      //Cv2.ImShow("ROI Image", ROIimg);      //尋找圖像輪廓      Point[][] contours;      HierarchyIndex[] hierachy;      Cv2.FindContours(ROIimg, out contours, out hierachy, RetrievalModes.List, ContourApproximationModes.ApproxTC89KCOS);      //根據找到的輪廓點,擬合橢圓      for (int i = 0; i < contours.Length; i++)      {        //擬合函數必須至少5個點,少于則不擬合        if (contours[i].Length < 5) continue;        //橢圓擬合        var rrt = Cv2.FitEllipse(contours[i]);        //ROI復原        rrt.Center.X += x;        rrt.Center.Y += y;        //畫橢圓        Cv2.Ellipse(img, rrt, new Scalar(0, 0, 255), 2, LineTypes.AntiAlias);        //畫圓心        Cv2.Circle(img, (int)(rrt.Center.X), (int)(rrt.Center.Y), 4, new Scalar(255, 0, 0), -1, LineTypes.Link8, 0);      }            Cv2.ImShow("Fit Circle", img);    }   }}

中間處理過程效果圖如下:

分別是閾值分割后,中值濾波后,擬合圓之后

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 土默特左旗| 碌曲县| 乐平市| 望都县| 禹城市| 根河市| 昭通市| 磐安县| 剑川县| 苏尼特左旗| 库伦旗| 象州县| 永修县| 阿城市| 安徽省| 长兴县| 富阳市| 军事| 普陀区| 同江市| 扎囊县| 许昌市| 苏尼特左旗| 呼图壁县| 新巴尔虎左旗| 元氏县| 武胜县| 敖汉旗| 沈阳市| 基隆市| 丰都县| 皋兰县| 竹山县| 彭州市| 喜德县| 临邑县| 吐鲁番市| 通海县| 东源县| 萨嘎县| 富阳市|