OpenCVSharp對圖像進行顏色分割


使用OpencvSharp的InRange函數對圖像進行RGB顏色的分割。

 1 using System;  2 using OpenCvSharp;  3 using OpenCvSharp.Extensions;  4 using OpenCvSharp.XFeatures2D;  5 using static OpenCvSharp.Cv2;  6 namespace Mycv  7 {  8     public class cvGO  9  { 10          /// <summary>
11         /// 分割顏色得到面積占比的大小 12         /// </summary>
13         /// <param name="srcbmp">原圖</param>
14         /// <param name="dstbmp">結果圖</param>
15         /// <param name="value_Low">最低值RGB(0-255) ([0]:R,[1]:G,[2]:B)這里用一個長度為3的數組存放最低RGB值</param>
16         /// <param name="value_High">最高值RGB(0-255)([0]:R,[1]:G,[2]:B)這里用一個長度為3的數組存放最高RGB值 </param>
17         public float Color_Inrange(Bitmap srcbmp, out Bitmap dstbmp, int[] value_Low, int[] value_High) 18  { 19             //bitmap轉mat
20             using (Mat src = BitmapConverter.ToMat(srcbmp)) 21             using (Mat dst = new Mat()) 22  { 23                 //根據傳進來的2個數組新建兩個Scalar
24                 Scalar cvL = new Scalar(value_Low[0], value_Low[1], value_Low[2]); 25                 Scalar cvH = new Scalar(value_High[0], value_High[1], value_High[2]); 26                 
27                 //這一步就是顏色分割
28  InRange(src, cvL, cvH, dst); 29                 //Inrange的時候已經給dst賦值了,這里是mat轉bitmap
30                 dstbmp = dst.ToBitmap(); 31                 //用CountNonZero來得到面積,然后再計算占比並返回這個值
32                 return (CountNonZero(dst) / (src.Width * src.Height * 1.0f) * 100); 33  } 34  } 35  } 36 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM