【C# Opencv机器视觉】 Opencv水位检测、液体高度检测、卡尺高度检测

在这里插入图片描述

//安装OpencvSharp4
部分代码如下
  更新监控坐标();

            Mat roi = frame[识别区域];
            Mat hsv=new Mat();
            Mat 二值图 = new Mat();
            Mat 闭运算=new Mat();
            Mat 结构 ;

            //转为hsv
            Cv2.CvtColor(roi,hsv,ColorConversionCodes.BGR2HSV);
            //转二值图
            Cv2.InRange(hsv, hsvlower, hsvupper, 二值图);
            //结构化,填充噪点
            OpenCvSharp.Size s = new OpenCvSharp.Size(6,6);
            结构 = Cv2.GetStructuringElement(MorphShapes.Rect, s);
            //形态学变换
            Cv2.MorphologyEx(二值图,闭运算, MorphTypes.Close, 结构,null,2);
            //计算高度
            OpenCvSharp.Point 茶面左边 = new OpenCvSharp.Point();
            OpenCvSharp.Point 茶面右边 = new OpenCvSharp.Point();

            //线条颜色配置
            Scalar color = new Scalar(255, 0, 255);
            OpenCvSharp.Point 线起点, 线终点;
            if (判断刻度(闭运算,ref 茶面左边,ref 茶面右边))
            {
                茶高度 = roi.Height - 茶面左边.Y;

                线起点 = new OpenCvSharp.Point(识别区域.X + 茶面左边.X, 识别区域.Y + 茶面左边.Y);
                线终点 = new OpenCvSharp.Point(识别区域.X + 茶面右边.X+20, 识别区域.Y + 茶面右边.Y);
                Cv2.Line(frame, 线起点, 线终点, color, 2);
                Cv2.PutText(frame, 茶高度.ToString(), 线终点,HersheyFonts.HersheySimplex,0.5,color,2);
                textBox1.Text = 茶高度.ToString();
            }
            Cv2.Rectangle(frame, 识别区域,color,1);




### 关于液面检测的视觉技术实现方案 #### 技术背景 液态透镜作为一种新型光学元件,其工作原理基于液体表面张力的变化来调整焦距和焦点位置[^1]。这种特性使其非常适合用于动态场景下的实时监测任务,比如工业生产中的液位测量或者科学研究中的流体力学分析。 #### 方案概述 对于液面检测而言,可以采用计算机视觉技术和机器学习相结合的方法来进行处理。具体来说: - **图像采集阶段**:利用高精度相机获取待测容器内的液体表面图片序列作为输入数据源; - **预处理部分**:去除噪声干扰并增强对比度以便后续操作更加精确可靠;此环节还可以加入边缘锐化滤波器进一步突出感兴趣区域轮廓特征; - **核心算法设计方面**: - 如果目标仅限于简单规则形状(如圆形截面储罐),那么可以直接运用几何模型拟合方法求解最佳匹配曲线从而得到高度数值。 - 对于不规则形态物体,则需引入更复杂的模式识别手段——例如卷积神经网络(Convolutional Neural Networks, CNNs),训练大量样本让系统学会自动辨别不同类型样品之间的差异之处进而完成分类预测过程[^2]。 另外需要注意的一点是在实际工程应用当中往往存在光照条件不稳定等因素影响成像质量,因此建议增加额外补偿机制确保全天候稳定运行效果[^3]。 ```python import cv2 from matplotlib import pyplot as plt def detect_liquid_surface(image_path): img = cv2.imread(image_path) gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray_img,(7,7),0) edges = cv2.Canny(blurred, threshold1=50,threshold2=150) contours,hierarchy=cv2.findContours(edges.copy(),cv2.RETR_EXTERNAL ,cv2.CHAIN_APPROX_SIMPLE ) contour_areas=[(c,cv2.contourArea(c))for c in contours] max_contour=max(contour_areas,key=lambda x:x[1])[0] liquid_level_y=min([pt[0][1] for pt in max_contour]) _,ax=plt.subplots() ax.imshow(cv2.cvtColor(img,cv2.COLOR_BGR2RGB)) ax.axhline(y=liquid_level_y,color='r',linestyle='-') plt.show() detect_liquid_surface('path_to_image.jpg') ``` 上述代码片段展示了一个基本流程框架图样例程序,该函数接收一张包含液体表面的照片路径字符串形式参数image_path,并返回标记有红色水平线指示推测出来的液平面所在位置的新绘图窗口显示结果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扩视机器视觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值