基于python的大米粒分割(本文适合两个凹点的粘连物体)

一、参考下面的文章,本文对该文章未实现的地方进行补充

https://blog.csdn.net/m0_37968030/article/details/112847031

二、项目原图(本文的环境是opencv4.5版本)
在这里插入图片描述
三、处理流程

 图像输入-->二值化-->形态学运算-->轮廓提取-->凸包检测-->消除粘连-->标记

四、代码实现

在这里插入代码片 #cv2.cv2 用于代码提示
import cv2.cv2 as cv
import numpy as np

#图像输入
input_img = cv.imread('./img/222.png',0)
# cv.imshow("input_img",input_img)
#降噪处理
blur = cv.blur(input_img,(3,3),0)
# cv.imshow("blur",blur)
# 图像二值化
thre,thres = cv.threshold(blur,0,255,cv.THRESH_OTSU)
cv.imshow("thre",thres)

#形态学开运算
kernel = np.ones((3,3),np.uint8)
img_bin = cv.morphologyEx(thres,cv.MORPH_OPEN,kernel)
cv.imshow("image_bin", img_bin)
#轮廓提取
contours ,hierarchy  = cv.findContours(img_bin, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
#计算凸包数量
for i in range(len(contours)) :
    cnt =contours[i]
    # 返回该物体得凸包个数
    hull = cv.convexHull(cnt, returnPoints=False)  # 需要point2d
    print(hull)
    if len(hull) >10:
        # 缺陷计算
        defects = cv.convexityDefects(cnt, hull)
        if len(defects)>2:
            #按第四个之倒叙排序
            defects_point = defects[np.lexsort(-defects.T)]
            os, oe, of, od = defects_point[0,0,0]
            ostart =tuple(cnt[of][0])
            ts, te, tf, td = defects_point[0,1,0]
            tstart = tuple(cnt[tf][0])
            if (od/256 )>10:
                cv.line(img_bin, tuple(ostart), tuple(tstart), [0, 0, 255], 2)

# #再次找轮廓花外接矩形
contours2 ,hierarchy2  = cv.findContours(img_bin, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
for c in contours2:
    #拿到该轮廓得最小矩形得顶点坐标和长宽
    x, y, w, h = cv.boundingRect(c)
    cv.rectangle(input_img,(x,y),(x+w,y+h),(0,255,255),1)
    #计算圆心位置
    cx = int(x + w / 2)
    cy = int(y + h / 2)
    cv.circle(input_img, (cx, cy), 1, (0, 0, 255), -1)  # 用圆点绘制目标重心
cv.namedWindow("image_bin_line",0)
cv.imshow("image_bin_line", input_img)
cv.waitKey()

五、效果图
在这里插入图片描述

  • 6
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值