用python识别图像中的草莓,并画出轮廓,将带有一点黄色的标记为未成熟,并将所有草莓的质心标出来且输出坐标
时间: 2024-03-03 16:49:09 浏览: 75
好的,针对您的问题,我可以为您提供以下解决方案:
1. 首先,使用 OpenCV 库读取图像,并将其转换为灰度图像以进行处理。
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
2. 接下来,使用 cv2.findContours 函数查找图像中的所有轮廓,并使用 cv2.drawContours 函数在图像上绘制出这些轮廓。
```python
# 查找轮廓
contours, hierarchy = cv2.findContours(gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
```
3. 对于每个轮廓,可以使用 cv2.moments 函数计算其质心坐标,并使用 cv2.circle 函数在图像上标出这些质心。
```python
# 遍历轮廓
for contour in contours:
# 计算轮廓的质心
M = cv2.moments(contour)
cx = int(M['m10'] / M['m00'])
cy = int(M['m01'] / M['m00'])
# 在图像上标出质心
cv2.circle(img, (cx, cy), 5, (0, 0, 255), -1)
```
4. 最后,可以使用颜色过滤器识别出未成熟的草莓,并对其进行标记。
```python
# 颜色过滤器
lower_red = np.array([0, 100, 100])
upper_red = np.array([30, 255, 255])
mask = cv2.inRange(hsv, lower_red, upper_red)
# 标记未成熟的草莓
for contour in contours:
# 计算轮廓的质心
M = cv2.moments(contour)
cx = int(M['m10'] / M['m00'])
cy = int(M['m01'] / M['m00'])
# 判断是否为未成熟的草莓
if mask[cy, cx] == 255:
cv2.putText(img, 'unripe', (cx, cy), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
```
完整代码如下:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 查找轮廓
contours, hierarchy = cv2.findContours(gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 2)
# 转换为 HSV 颜色空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 颜色过滤器
lower_red = np.array([0, 100, 100])
upper_red = np.array([30, 255, 255])
mask = cv2.inRange(hsv, lower_red, upper_red)
# 标记未成熟的草莓
for contour in contours:
# 计算轮廓的质心
M = cv2.moments(contour)
cx = int(M['m10'] / M['m00'])
cy = int(M['m01'] / M['m00'])
# 判断是否为未成熟的草莓
if mask[cy, cx] == 255:
cv2.putText(img, 'unripe', (cx, cy), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
# 在图像上标出质心
cv2.circle(img, (cx, cy), 5, (0, 0, 255), -1)
# 显示结果图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
希望这个解决方案能够帮到您!如果您有其他问题,请随时问我。
阅读全文