标签:int dst Cv2 OpenCvSharp new 识别 rect Winform
OpenCvSharp颜色识别流程为:
- 读取RGB图片
- 转化为HSV模型
- 输入识别颜色的HSV范围,使用InRange函数进行颜色识别
- 图像处理,将识别区域突出显示
界面设计:
核心代码:
private Bitmap _ShowHsvProcess(string path,int hMin,int hMax,int sMin,int sMax,int vMin,int vMax)
{
Mat src = new Mat(path, ImreadModes.AnyColor);
Mat hsv = new Mat();
Cv2.CvtColor(src, hsv, ColorConversionCodes.BGR2HSV); //转化为HSV
Mat dst = new Mat();
Scalar scL = new Scalar(hMin, sMin, vMin);
Scalar scH = new Scalar(hMax, sMax, vMax);
Cv2.InRange(hsv, scL, scH, dst); //获取HSV处理图片
var kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(20, 20),
new OpenCvSharp.Point(-1, -1));
Cv2.Threshold(dst, dst, 0, 255, ThresholdTypes.Binary); //二值化
Cv2.Dilate(dst, dst, kernel); //膨胀
Cv2.Erode(dst, dst, kernel); //腐蚀
Cv2.FindContours(dst, out OpenCvSharp.Point[][] contours, out HierarchyIndex[] hierarchy, RetrievalModes.CComp, ContourApproximationModes.ApproxSimple, null);
if (contours.Length > 0)
{
var boxes = contours.Select(Cv2.BoundingRect).Where(w => w.Height >= 10 && w.Width > 10);
var imgTar = src.Clone();
foreach (var rect in boxes)
{
Cv2.Rectangle(imgTar, new OpenCvSharp.Point(rect.X, rect.Y), new OpenCvSharp.Point(rect.X + rect.Width, rect.Y + rect.Height), new OpenCvSharp.Scalar(0, 0, 255), 1);
}
Bitmap bitmap = BitmapConverter.ToBitmap(imgTar);
return bitmap;
}
else
{
Bitmap bitmap = BitmapConverter.ToBitmap(src);
return bitmap;
}
}
效果:
常见颜色的HSV取值范围
具体代码可以进下面的路径进行查看:
https://codechina.csdn.net/lmSwind/opencvsharp_project/-/tree/master/src/OpenCvSharpProject
标签:int,dst,Cv2,OpenCvSharp,new,识别,rect,Winform 来源: https://blog.csdn.net/lmSwind/article/details/116600931
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。