OpenCVSharp对图像进行颜色分割

Posted ybqjymy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

以上是关于OpenCVSharp对图像进行颜色分割的主要内容,如果未能解决你的问题,请参考以下文章

OpenCVSharp4 识别物体系列之预处理

创建特征向量以对空中图像中的片段进行分类

1.5:基于聚类的“图像分割”实例编写

如何标记从卷积神经网络的分割算法生成的图像片段?

ocr和图像预处理技术

使用颜色空间进行图像分割