使用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 }

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)