浅谈OpenCV 粗略计算工件轮廓面积和外接圆直径(Emgu.CV)

本文介绍了如何在.NET系统中集成OpenCV,通过简单的图像处理技术,如灰度处理、二值化和轮廓分析,计算出工具的大致长度,以便于库房工具的归还管理。作者分享了关键代码段和实现思路,适用于初学者了解OpenCV在实际项目中的应用。

前言

最近领导在做库房工具管理这块的功能,希望能集成OpenCV 粗略的计算出工具的长度,以方便用户再归还工具的时候,提示用户该放在那种尺寸的盒子里面,这便是这篇文章的由来。

我们的系统是基于.net开发的,所以采用的是 Emgu.CV这个框架来开发相应的功能,首先我们来看看效果吧,如下图。在这里我们的高宽、面积、直径都是计算的像素值,实际情况中我们需要根据自己的相片尺寸和拍照背景板与摄像头的距离,得出比例尺,根据比例尺大概计算出物体的实际面积和长度。

在这里插入图片描述

实现思路

我们业务中不需要太高的精度,所以采用一些简单的调用OpenCV 函数就能实现,注意本文的背景采用的是A4纸白色背景,如果背景不同,二值化的过程中需要你自己调节对应的参数。

  • 对照片进行灰度和二值处理
  • 去除照片中的阴影
  • 描绘物体的轮廓、和外接圆,就可以得出面积和物体长度

代码(主要逻辑代码,关于页面的代码需要自己采用 winform设计)

 public partial class Form1 : Form
 {
   
   
     public Form1()
     {
   
   
         InitializeComponent();
     }

     string imagePath = string.Empty;
     string result_path = string.Empty;
     /// <summary>
     ///  上传图片
     /// </summary>
     /// <param name="sender"></param>
     /// <param name="e"></param>
     private void button_up_Click(object sender, EventArgs e)
     {
   
   
       

         OpenFileDialog openFileDialog = new OpenFileDialog();
         if (openFileDialog.ShowDialog() == DialogResult.OK)
         {
   
   
             imagePath = openFileDialog.FileName; //得到文件全路径名
             // 使用Image.FromFile方法加载图片  
             System.Drawing.Image image = System.Drawing.Image.FromFile(imagePath);
             // 设置PictureBox的图片  
             src.Image = image;
             // (可选)设置PictureBox的大小以适应图片  
             src.SizeMode = PictureBoxSizeMode.StretchImage;
            // AreaCalculate(imagePath);
             BinaryTreatment(imagePath);
         }
     }

     private void button_calculate_Click(object sender, EventArgs e)
     {
   
   
         AreaCalculate(result_path);
     }

     /// <summary>
     /// 去除图片阴影
     /// </summary>
     /// <param name="path"></param>
     private string RemoveShadow(string path)
     {
   
   
         // 加载图像
         Mat image = CvInvoke.Imread(path, ImreadModes.Color);

         // 将图像转换为灰度图像
         Mat grayImage = new Mat();
         CvInvoke
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值