签订网站制作协议需注意什么,小学生编程软件,会员卡充值管理系统,团购网站怎么运营千粒重是一个重要的农艺性状#xff0c;通过对其的测量和研究#xff0c;我们可以更好地理解作物的生长状况#xff0c;优化农业生产#xff0c;提高作物产量和品质。但数籽粒数目是一个很繁琐和痛苦的过程#xff0c;我们现在用一个简单的python程序来数水稻籽粒。代码的… 千粒重是一个重要的农艺性状通过对其的测量和研究我们可以更好地理解作物的生长状况优化农业生产提高作物产量和品质。但数籽粒数目是一个很繁琐和痛苦的过程我们现在用一个简单的python程序来数水稻籽粒。代码的大致流程如下
对照片进行预处理包括灰度化、二值化等操作以便更好地识别籽粒。使用轮廓检测算法来找到照片中的籽粒并计算轮廓面积对轮廓面积进行判断以便区分重叠的籽粒。计算籽粒数目将结果输出到屏幕上或保存到文件中。
具体代码如下
1. 加载需要的包
import cv2
from matplotlib import pyplot as plt
import numpy as np
from PIL import Image, ImageDraw, ImageFont2. 导入图片并展示
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 i1draw1 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 iround(a[j])draw1 ImageDraw.Draw(draw)font ImageFont.truetype(arial.ttf, 30)draw1.text(tuple(c[0][0]), str(i1)~str(iround(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()