python基于opencv实现数籽粒

  千粒重是一个重要的农艺性状,通过对其的测量和研究,我们可以更好地理解作物的生长状况,优化农业生产,提高作物产量和品质。但数籽粒数目是一个很繁琐和痛苦的过程,我们现在用一个简单的python程序来数水稻籽粒。代码的大致流程如下:

  1. 对照片进行预处理,包括灰度化、二值化等操作,以便更好地识别籽粒。
  2. 使用轮廓检测算法来找到照片中的籽粒,并计算轮廓面积;
  3. 对轮廓面积进行判断,以便区分重叠的籽粒。
  4. 计算籽粒数目,将结果输出到屏幕上或保存到文件中。

具体代码如下:

1. 加载需要的包

import cv2
from matplotlib import pyplot as plt
import numpy as np
from PIL import Image, ImageDraw, ImageFont

2. 导入图片并展示

img = cv2.imread('pic2.jpg',0)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 显示图像
plt.imshow(img_rgb)
plt.show()

在这里插入图片描述

3. 轮廓检测算法来找到照片中的籽粒

ret, thresh = cv2.threshold(img, 180, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
area = np.zeros(len(contours))
for i in np.arange(0, len(contours)):
    area[i] = cv2.contourArea(contours[i])

4. 对轮廓面积进行判断,以便区分重叠的籽粒

med = np.median(area)
j = 0
i = 0
a = area/med
draw = Image.fromarray(img)
for c in contours:
    if round(a[j]) == 1:   
        i = i+1
        draw1 = ImageDraw.Draw(draw)
        font = ImageFont.truetype('arial.ttf', 30)
        draw1.text(tuple(c[0][0]), str(i), fill = 'black', font = font)
    if round(a[j]) > 1:   
        i = i+round(a[j])
        draw1 = ImageDraw.Draw(draw)
        font = ImageFont.truetype('arial.ttf', 30)
        draw1.text(tuple(c[0][0]), str(i+1)+"~"+str(i+round(a[j])), fill = 'black', font = font)
    j = j + 1
print("籽粒数目:", i)

5. 展示标记情况

img_rgb = cv2.cvtColor(np.array(draw), cv2.COLOR_BGR2RGB)
# 显示图像
plt.imshow(img_rgb)
plt.savefig("rice.pdf")
plt.show()

在这里插入图片描述

相关推荐

  1. OpenCV基础到入门(基于python

    2024-04-12 21:54:03       17 阅读
  2. python实现opencv(清华镜像)

    2024-04-12 21:54:03       48 阅读
  3. python opencv实现车牌识别

    2024-04-12 21:54:03       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 21:54:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 21:54:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 21:54:03       87 阅读
  4. Python语言-面向对象

    2024-04-12 21:54:03       96 阅读

热门阅读

  1. 神经网络训练中batch的作用

    2024-04-12 21:54:03       34 阅读
  2. 通过docker容器部署oceanbase单机版测试

    2024-04-12 21:54:03       42 阅读
  3. Spring IoC面试题解析

    2024-04-12 21:54:03       39 阅读
  4. hibernate缓存

    2024-04-12 21:54:03       44 阅读
  5. python-pytorch实现lstm模型预测文本输出0.1.00

    2024-04-12 21:54:03       27 阅读
  6. 前端响应式布局方式及其优缺点大全

    2024-04-12 21:54:03       39 阅读
  7. 前端面试题(1)

    2024-04-12 21:54:03       30 阅读
  8. 基础知识点全覆盖(1)

    2024-04-12 21:54:03       33 阅读
  9. Go导入私有仓库

    2024-04-12 21:54:03       39 阅读
  10. 蓝桥集训之修理牛棚

    2024-04-12 21:54:03       43 阅读