数字图像处理技术统计米粒个数【Python实现】

如图所示(只要是米粒图都行),通过图像处理完成数米粒个数的功能,要求数米粒个数要正确。

  1. 图像预处理:将彩色图像转换为灰度图像,并对灰度图像进行平滑处理,以减少噪音的影响。
  2. 二值化处理:根据图像的灰度分布,选择适当的阈值将图像二值化,并对二值化图像进行形态学操作,以去除噪音并改善物体的形状。
  3. 目标检测和计数:使用轮廓查找功能,找到二值化图像中的所有轮廓,并对每个轮廓进行筛选,排除不符合米粒形状特征的轮廓。最后,统计剩余的轮廓数量,即为米粒的个数。

代码如下:

import cv2

# 读取图像并转换为灰度图像
image = cv2.imread('rice.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 对灰度图像进行平滑处理
blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)

# 二值化处理
_, thresholded_image = cv2.threshold(blurred_image, 100, 255, cv2.THRESH_BINARY)

# 形态学操作
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
morphology_image = cv2.morphologyEx(thresholded_image, cv2.MORPH_OPEN, kernel)

# 轮廓查找
contours, _ = cv2.findContours(morphology_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 统计米粒个数
rice_count = 0
for contour in contours:
    area = cv2.contourArea(contour)
    if area > 100 and area < 5000:  # 根据实际情况调整面积阈值
        rice_count += 1
print("米粒个数:", rice_count)

# 在图像上绘制轮廓(可要可不要)
contour_image = cv2.drawContours(image.copy(), contours, -1, (0, 255, 0), 2)
cv2.imshow("Contour Image", contour_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

如果没有cv2包,要在虚拟环境下下载,下载命令:

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/;

运行结果:

统计出的米粒个数为49,与实际相符合。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值