最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# OpenCvSharp實現(xiàn)常見檢測(斑點檢測,輪廓檢測,邊緣檢測)

 更新時間:2023年12月28日 10:59:31   作者:李建軍  
這篇文章主要為大家詳細介紹了c#如何使用OpenCvSharp實現(xiàn)常見檢測(斑點檢測,輪廓檢測,邊緣檢測),文中的示例代碼講解詳細,需要的小伙伴可以參考下

在C#中使用OpenCV進行圖像處理時,可以使用不同的算法和函數(shù)來實現(xiàn)斑點檢測、邊緣檢測和輪廓檢測。

  • 斑點檢測
  • 邊緣檢測
  • 輪廓檢測

一、斑點檢測(Blob)

斑點檢測是指在圖像中找到明亮或暗的小區(qū)域(通常表示為斑點),并標記它們的位置??梢允褂肙penCV中的函數(shù)SimpleBlobDetector來實現(xiàn)斑點檢測。該函數(shù)將圖像轉(zhuǎn)換為二進制圖像,然后找到所有的輪廓,通過設置閾值來確定斑點的亮度范圍。

SimpleBlobDetector.Params

//函數(shù)原型
public Params()
{
    Data = new WParams
    {
        thresholdStep = 10f,
        minThreshold = 50f,
        maxThreshold = 220f,
        minRepeatability = 2u,
        minDistBetweenBlobs = 10f,
        filterByColor = 1,
        blobColor = 0,
        filterByArea = 1,
        minArea = 25f,
        maxArea = 5000f,
        filterByCircularity = 0,
        minCircularity = 0.8f,
        maxCircularity = float.MaxValue,
        filterByInertia = 1,
        minInertiaRatio = 0.1f,
        maxInertiaRatio = float.MaxValue,
        filterByConvexity = 1,
        minConvexity = 0.95f,
        maxConvexity = float.MaxValue
    };
}

SimpleBlobDetector是OpenCV中用于檢測二值圖像中的斑點的類,以下是它的參數(shù)說明:

1. thresholdStep:二值化閾值步長,用于在二值化過程中逐步增加或減小閾值,默認為10。

2. minThreshold:最小的二值化閾值,默認為50。

3. maxThreshold:最大的二值化閾值,默認為220。

4. minRepeatability:最小的斑點重復次數(shù),默認為2,表示只有當一個斑點至少在兩個不同位置被檢測到時才會被認為是有效的。

5. blobColor:斑點的亮度值,取值為0或255,默認為0,表示只檢測黑色斑點。

6. filterByArea:是否根據(jù)斑點的面積進行過濾,默認為true,表示進行過濾。

7. minArea:最小的斑點面積,默認為25,表示只檢測面積大于25的斑點。

8. maxArea:最大的斑點面積,默認為5000,表示只檢測面積小于5000的斑點。

9. filterByCircularity:是否根據(jù)斑點的圓形度進行過濾,默認為false,表示不進行過濾。

10. minCircularity:最小的斑點圓形度,默認為0.8,表示只檢測圓形度大于0.8的斑點。

11. maxCircularity:最大的斑點圓形度,默認為1,表示只檢測圓形度小于1的斑點。

12. filterByInertia:是否根據(jù)斑點的慣性比進行過濾,默認為true,表示進行過濾。

13. minInertiaRatio:最小的斑點慣性比,默認為0.1,表示只檢測慣性比大于0.1的斑點。

14. maxInertiaRatio:最大的斑點慣性比,默認為1,表示只檢測慣性比小于1的斑點。

15. filterByConvexity:是否根據(jù)斑點的凸度進行過濾,默認為true,表示進行過濾。

16. minConvexity:最小的斑點凸度,默認為0.95,表示只檢測凸度大于0.95的斑點。

17. maxConvexity:最大的斑點凸度,默認為1,表示只檢測凸度小于1的斑點。

這些參數(shù)可以根據(jù)具體應用場景進行調(diào)整,以得到符合要求的斑點檢測結(jié)果。

所使用圖例

// 讀取原始圖像
Mat image = new Mat("1.jpg", ImreadModes.Color);
 
// 創(chuàng)建SimpleBlobDetector參數(shù)
SimpleBlobDetector.Params parameters = new SimpleBlobDetector.Params();
 
// 設置參數(shù)
parameters.FilterByArea = true;
parameters.MinArea = 100;
parameters.MaxArea = 10000;
 
// 創(chuàng)建SimpleBlobDetector
SimpleBlobDetector detector = SimpleBlobDetector.Create(parameters);
 
// 檢測斑點
KeyPoint[] keypoints = detector.Detect(image);
 
// 在圖像上繪制斑點
Mat result = new Mat();
Cv2.DrawKeypoints(image, keypoints, result, Scalar.All(-1), DrawMatchesFlags.Default);
 
// 顯示結(jié)果
Cv2.ImShow("Result", result);
Cv2.WaitKey(0);

二、邊緣檢測

邊緣檢測是一種圖像處理技術(shù),可以找到圖像中的邊緣或邊界。penCV 中提供的兩種重要邊緣檢測算法:Sobel邊緣檢測和 canny邊緣檢測。

1、cv2.Sobel()

//函數(shù)原型
public static void Sobel(
    InputArray src, 
    OutputArray dst, 
    int ddepth, 
    int dx, 
    int dy, 
    int ksize = 3, 
    double scale = 1,
    double delta = 0, 
    BorderType borderType = BorderType.Default
)

參數(shù)說明:

src:輸入圖像。

dst:輸出圖像,是一個與輸入圖像相同大小和類型的圖像。

ddepth:輸出圖像的深度,通常使用-1表示與輸入圖像相同深度。

dx:表示在水平方向上進行邊緣檢測的階數(shù)。

dy:表示在垂直方向上進行邊緣檢測的階數(shù)。

ksize:表示卷積核的大小,默認為3。

scale:可選參數(shù),用于縮放結(jié)果,默認為1。

delta:可選參數(shù),用于調(diào)整結(jié)果的偏移,默認為0。

borderType:可選參數(shù),用于指定邊界的處理方式,默認為BorderType.Default。

使用cv2.Sobel函數(shù)可以進行邊緣檢測,通過調(diào)整dx和dy的值可以獲得不同方向的邊緣信息。輸出圖像的像素值表示了對應位置的邊緣強度。

cv2.Sobel函數(shù)進行邊緣檢測的示例

using OpenCvSharp;
 
Mat srcImage = new Mat("input.jpg", ImreadModes.Color);
Mat grayImage = new Mat();
Cv2.CvtColor(srcImage, grayImage, ColorConversionCodes.BGR2GRAY);
 
Mat edges = new Mat();
Cv2.Sobel(grayImage, edges, MatType.CV_8U, 1, 0, 3);
 
Cv2.ImShow("Edges", edges);
Cv2.WaitKey(0);

這個示例將輸入圖像轉(zhuǎn)換為灰度圖像,并使用Sobel算子在水平方向上進行邊緣檢測,然后顯示結(jié)果圖像。

總之,cv2.Sobel函數(shù)是OpenCVSharp庫中的一個函數(shù),用于在圖像上應用Sobel算子進行邊緣檢測。通過調(diào)整參數(shù)可以獲得不同方向的邊緣信息。

2、cv2.Canny()

public static void Canny(InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize = 3, bool L2gradient = false)

參數(shù)說明:

image:要進行邊緣檢測的輸入圖像。

edges:輸出的邊緣圖像。

threshold1:第一個閾值,用于邊緣鏈接。

threshold2:第二個閾值,用于邊緣鏈接。

apertureSize:Sobel算子的孔徑大小,默認為3。

L2gradient:一個布爾值,指定求梯度大小的方法,默認為false。

Canny邊緣檢測算法的原理是:首先對圖像進行高斯濾波,然后通過Sobel算子計算圖像的梯度,再通過非極大值抑制來提取局部最大值作為邊緣點,最后通過雙閾值檢測來連接邊緣點。

cv2.Canny函數(shù)的示例代碼:

using OpenCvSharp;
 
class Program
{
    static void Main(string[] args)
    {
        // 讀取圖像
        Mat image = Cv2.ImRead("image.jpg", ImreadModes.Color);
 
        // 將圖像轉(zhuǎn)換為灰度圖像
        Mat grayImage = new Mat();
        Cv2.CvtColor(image, grayImage, ColorConversionCodes.BGR2GRAY);
 
        // 使用Canny邊緣檢測算法檢測邊緣
        Mat edges = new Mat();
        Cv2.Canny(grayImage, edges, 100, 200);
 
        // 顯示原始圖像和邊緣圖像
        Cv2.ImShow("Original Image", image);
        Cv2.ImShow("Edges", edges);
        Cv2.WaitKey(0);
 
        // 釋放內(nèi)存
        Cv2.DestroyAllWindows();
        image.Dispose();
        grayImage.Dispose();
        edges.Dispose();
    }
}

這個示例代碼從文件中讀取圖像,然后將其轉(zhuǎn)換為灰度圖像。然后,它使用Canny邊緣檢測算法檢測圖像中的邊緣,并將結(jié)果顯示出來。最后,釋放內(nèi)存并關(guān)閉窗口。

注意:在運行此代碼之前,確保已在項目中添加對OpenCVSharp庫的引用,并將圖像文件與示例代碼放在同一目錄下,并將圖像文件名替換為實際的圖像文件名

三、 輪廓檢測

輪廓檢測是一種從圖像中提取物體形狀的技術(shù)。OpenCV中的cvFindContours函數(shù)可以實現(xiàn)輪廓檢測。該函數(shù)將圖像轉(zhuǎn)換為二進制圖像,然后找到所有的輪廓。

輪廓檢測步驟

  • Cv2.CvtColor彩色圖像轉(zhuǎn)換為灰度圖像
  • cv2.threshold函數(shù)用于將圖像進行二值化處理
  • Cv2.FindContours在圖像中查找輪廓
  • Cv2.DrawContours在圖像上繪制輪廓

示例代碼

 // 讀取圖像
 Mat image = Cv2.ImRead("1.png", ImreadModes.Color);
 
 // 將圖像轉(zhuǎn)換為灰度圖像
 Mat grayImage = new Mat();
 
 Cv2.CvtColor(image, grayImage, ColorConversionCodes.BGR2GRAY); // 進行BGR2GRAY轉(zhuǎn)換
 
 Mat ThresholdImage = new Mat();
 Cv2.Threshold(grayImage, ThresholdImage, 150, 255, ThresholdTypes.Binary); // 對圖像進行二值化處理
 Cv2.ImShow("ThresholdImage", ThresholdImage);
 Cv2.WaitKey(0);
 
 OpenCvSharp.Point[][] contours;
 HierarchyIndex[] hierarchy;
 
 Cv2.FindContours(ThresholdImage, out contours, out hierarchy, RetrievalModes.List, ContourApproximationModes.ApproxSimple);
 
 Scalar color = new Scalar(0, 255, 0); // 輪廓顏色為綠色
 int thickness = 2; // 輪廓線粗細為2
 
 for (int i = 0; i < contours.Length; i++)
 {
     Cv2.DrawContours(ThresholdImage, contours, i, color, thickness); // 繪制輪廓
 }
 
 Cv2.ImShow("Contours", ThresholdImage); // 顯示圖像
 Cv2.WaitKey(0);

以上就是c# OpenCvSharp實現(xiàn)常見檢測(斑點檢測,輪廓檢測,邊緣檢測)的詳細內(nèi)容,更多關(guān)于c# OpenCvSharp的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c#抽象類和接口的區(qū)別小結(jié)

    c#抽象類和接口的區(qū)別小結(jié)

    C#中抽象類和接口都支持多態(tài)性,但存在關(guān)鍵區(qū)別,實際開發(fā)中常組合使用,抽象類提供基礎實現(xiàn),接口確保規(guī)范一致性,下面就來介紹一下兩者的區(qū)別,感興趣的可以了解一下
    2025-07-07
  • C#實現(xiàn)更改MDI窗體背景顏色的方法

    C#實現(xiàn)更改MDI窗體背景顏色的方法

    這篇文章主要介紹了C#實現(xiàn)更改MDI窗體背景顏色的方法,涉及C#窗體背景色的設置技巧,非常簡單實用,需要的朋友可以參考下
    2015-08-08
  • C#實現(xiàn)文字轉(zhuǎn)語音功能

    C#實現(xiàn)文字轉(zhuǎn)語音功能

    這篇文章主要為大家詳細介紹了C#實現(xiàn)文字轉(zhuǎn)語音功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • unity 如何獲取button文本的內(nèi)容

    unity 如何獲取button文本的內(nèi)容

    這篇文章主要介紹了unity 獲取button文本的內(nèi)容操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C# ManagementObjectSearcher操作window案例詳解

    C# ManagementObjectSearcher操作window案例詳解

    這篇文章主要介紹了C# ManagementObjectSearcher操作window案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 使用C#實現(xiàn)一個PPT遙控器

    使用C#實現(xiàn)一個PPT遙控器

    由于本人需要參加的討論會比較多,每次都會涉及到PPT,有時候坐在電腦旁講會比較不生動,前人就發(fā)明了PPT遙控器,今天就給大家介紹下基于C#實現(xiàn)ppt遙控器,感興趣的朋友一起看看吧
    2021-05-05
  • C#畫圖之餅圖折線圖的實現(xiàn)方法

    C#畫圖之餅圖折線圖的實現(xiàn)方法

    這篇文章主要介紹了C#畫圖之餅圖折線圖的實現(xiàn)方法,以實例形式講述了C#畫圖的完整實現(xiàn)過程,是非常實用的技巧,有不錯的借鑒價值,需要的朋友可以參考下
    2014-09-09
  • Unity實現(xiàn)大轉(zhuǎn)盤的簡單筆記

    Unity實現(xiàn)大轉(zhuǎn)盤的簡單筆記

    這篇文章主要為大家分享了Unity實現(xiàn)大轉(zhuǎn)盤的簡單筆記,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C#將異步改成同步方法示例

    C#將異步改成同步方法示例

    這篇文章主要為大家介紹了C#將異步改成同步方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • C# yield關(guān)鍵字詳解

    C# yield關(guān)鍵字詳解

    這篇文章主要介紹了C# yield關(guān)鍵字詳解,本文講解了yield是一個語法糖、語法糖的實現(xiàn)(實現(xiàn)IEnumerable<T>接口的類)、yield使用中的特殊情況等內(nèi)容,需要的朋友可以參考下
    2015-04-04

最新評論

科技| 宝坻区| 安远县| 盐津县| 武隆县| 雷波县| 宁陕县| 微博| 临澧县| 北海市| 桦甸市| 万宁市| 西畴县| 翁牛特旗| 张家港市| 枣庄市| 神木县| 龙江县| 阳春市| 贵定县| 潢川县| 朝阳县| 霍林郭勒市| 阳谷县| 阳西县| 南康市| 临城县| 石嘴山市| 杭州市| 潞西市| 偃师市| 罗山县| 瓦房店市| 神农架林区| 安达市| 永修县| 华坪县| 浙江省| 保靖县| 永修县| 韶关市|