You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于OpenCV的Python药片分割:非机器学习类边缘检测方案问询

无需机器学习的药片个体分割方案(基于Canny与传统图像处理)

核心思路:先色彩粗分割提纯区域,再针对性做边缘检测

不用直接在全图跑Canny,先把药片区域从背景里抠出来,再处理边缘就能避开背景干扰,同时解决双色药片的识别问题。

步骤1:色彩通道精准提取

  • 用LAB色彩空间的a通道:这个通道对红/绿色差的敏感度远高于灰度图,能轻松把红色系药片(包括双色片的红色部分)和背景、黄色药片分开;
  • 用HSV的H通道提取黄色药片:设定H值范围(比如20-35),直接阈值分割出黄色区域;
  • 把a通道和H通道的分割结果做位或运算,得到覆盖所有药片的粗掩码。

步骤2:掩码优化(解决空洞与粘连)

  • 对粗掩码先做膨胀(椭圆核(5,5)),填补药片内部的小空洞;再做腐蚀(同尺寸椭圆核),去掉背景噪点,同时弱化药片间的粘连边界;
  • 双色药片的红色+黄色区域会被完整覆盖,不会出现掩码遗漏的问题。

步骤3:掩码约束下的Canny边缘检测

  • 把原始灰度图和优化后的掩码做位与操作,只保留药片区域的灰度信息,完全屏蔽背景;
  • 对提纯后的灰度图做高斯模糊(核(5,5),sigmaX=1.5),再用Canny检测边缘:高低阈值设为50/150(可根据实际调整),此时边缘只会出现在药片区域,不会被背景杂讯干扰,能得到清晰的药片轮廓。

步骤4:粘连药片的最终分割

  • 用cv2.findContours提取轮廓,通过轮廓面积过滤掉小噪点(比如面积小于2000的直接丢弃,根据药片实际尺寸调整);
  • 对少量仍粘连的轮廓,用距离变换+分水岭算法(纯传统图像处理):对掩码做距离变换,找到距离局部最大值的点作为种子,再用分水岭分割粘连区域,实现完全的个体分割。

后续区分药片

得到独立轮廓后,可通过轮廓的外接矩形尺寸、轮廓内的平均颜色(从原始RGB图提取),轻松区分不同类型的药片。

内容的提问来源于stack exchange,提问作者qazimodo123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:05:23