导入所需的库,包括 opencv 和 numpy。 读取图片。 将图片转换为灰度图。 使用 Canny 算法进行边缘检测。 使用 findContours 函数找出图像中的轮廓。 遍历每个轮廓,计算轮廓的面积,如果面积在一定范围内,则认为这个轮廓对应的是一个枸杞。 对于每个枸杞轮廓,使用 minAreaRect 函数计算出最小外接矩形,然后可以得到最小外接矩形的中心点坐标。
时间: 2023-02-05 16:41:51 浏览: 112
首先,需要导入所需的库,包括 opencv 和 numpy。
```
import cv2
import numpy as np
```
然后,使用 cv2.imread() 函数读取图片。
```
img = cv2.imread('image.jpg')
```
接下来,将图片转换为灰度图。
```
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
使用 Canny 算法进行边缘检测。
```
edges = cv2.Canny(gray, 50, 150)
```
使用 findContours 函数找出图像中的轮廓。
```
contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
```
遍历每个轮廓,计算轮廓的面积,如果面积在一定范围内,则认为这个轮廓对应的是一个枸杞。
```
for cnt in contours:
area = cv2.contourArea(cnt)
if area > min_area and area < max_area:
# 轮廓对应的是一个枸杞
...
```
对于每个枸杞轮廓,使用 minAreaRect 函数计算出最小外接矩形,然后可以得到最小外接矩形的中心点坐标。
```
rect = cv2.minAreaRect(cnt)
center = rect[0]
```
最终,可以使用 cv2.drawContours 函数将所有枸杞轮廓绘制在原图上,并使用 cv2.circle 函数在中心点处绘制圆圈。
```
cv2.drawContours(img, [cnt], 0, (0, 255, 0), 3)
cv2.circle(img, (int(center[0]), int(center[1])), 5, (0, 0, 255), -1)
阅读全文