基于k-means算法的麦穗计数 python代码
时间: 2023-06-20 07:05:55 浏览: 99
以下是基于 k-means 算法的麦穗计数的 Python 代码:
```python
import cv2
import numpy as np
from sklearn.cluster import KMeans
# 读取图像
img = cv2.imread('wheat.jpg')
# 将图像转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 阈值处理
_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# 获取轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 提取轮廓的面积
areas = []
for contour in contours:
area = cv2.contourArea(contour)
areas.append(area)
# 进行聚类
kmeans = KMeans(n_clusters=2, random_state=0).fit(np.array(areas).reshape(-1, 1))
# 获取聚类结果
labels = kmeans.labels_
# 统计麦穗数量
count = 0
for label in labels:
if label == 1:
count += 1
# 显示结果
cv2.putText(img, 'Count: {}'.format(count), (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
cv2.imshow('Result', img)
cv2.waitKey(0)
```
在这个代码中,我们首先读取了一个麦穗图像,并将其转换为灰度图像。然后使用阈值处理和轮廓提取来获取每个麦穗的面积。接下来,我们使用 k-means 算法对所有面积进行聚类,选择 2 个聚类中心。最后,我们统计第二个聚类中心的数量,这个数量就是麦穗的数量。最终,将结果显示在原始图像上。
阅读全文
相关推荐















