如何用opencv识别目标图形并求出目标图形与距离最近的图形的中心点
时间: 2023-05-25 10:05:45 浏览: 132
1. 定义目标图形:首先需要定义目标图形的特征,例如色彩、形状、大小等。可以使用cv2.inRange()函数来提取目标图形的二值化图像。
2. 检测轮廓:使用cv2.findContours()函数检测目标图形二值化图像中的轮廓,并绘制轮廓线。
3. 提取轮廓特征:计算每个轮廓的中心点坐标,并计算每个轮廓的面积。可以使用cv2.moments()函数计算轮廓的矩,并通过矩计算中心点坐标。
4. 计算距离:计算目标图形与其他图形的中心点距离,并找到距离最近的图形。
5. 绘制结果:将目标图形、距离最近的图形及其中心点绘制在源图像中。
以下是示例代码:
```python
import cv2
import numpy as np
# 读取源图像
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 定义目标图形的二值化图像
lower_bound = np.array([0, 0, 0])
upper_bound = np.array([255, 255, 255])
mask = cv2.inRange(img, lower_bound, upper_bound)
# 检测轮廓
contours, _ = cv2.findContours(mask,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0,255,0), 3)
# 提取轮廓特征
centers = []
sizes = []
for cnt in contours:
M = cv2.moments(cnt)
if M['m00'] != 0:
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])
center = (cx,cy)
area = cv2.contourArea(cnt)
centers.append(center)
sizes.append(area)
# 计算距离
target_center = centers[0]
min_dist = 10000
for i in range(1,len(centers)):
dist = cv2.norm(np.array(centers[i])-np.array(target_center))
if dist < min_dist:
min_dist = dist
nearest_center = centers[i]
# 绘制结果
cv2.circle(img,target_center,5,(0,0,255),-1)
cv2.circle(img,nearest_center,5,(255,0,0),-1)
cv2.imshow('Result',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文