python opencv判断点是否在感兴趣区域提取roi
时间: 2023-11-09 22:50:32 浏览: 46
您可以使用 OpenCV 中的 `pointPolygonTest` 函数来判断一个点是否在感兴趣区域内,并使用 `Rect` 类来提取感兴趣区域(ROI)。
首先,您需要定义感兴趣区域的边界点,然后使用 `cv2.pointPolygonTest` 函数来判断点是否在该区域内。该函数返回一个正数、负数或零,用于指示点相对于区域的位置关系。
以下是一个示例代码:
```python
import cv2
import numpy as np
# 定义感兴趣区域的边界点
roi_points = np.array([[100, 100], [300, 100], [300, 300], [100, 300]])
# 创建一个空白图像,用于可视化
img = np.zeros((400, 400), dtype=np.uint8)
# 绘制感兴趣区域
cv2.fillPoly(img, [roi_points], color=255)
# 定义一个点
point = (200, 200)
# 判断点是否在感兴趣区域内
result = cv2.pointPolygonTest(roi_points, point, measureDist=False)
# 如果返回值大于等于0,则点在区域内
if result >= 0:
print("Point is inside ROI")
else:
print("Point is outside ROI")
# 提取感兴趣区域(ROI)
x, y, w, h = cv2.boundingRect(roi_points)
roi = img[y:y+h, x:x+w]
# 可视化结果
cv2.circle(img, point, 3, color=128, thickness=-1)
cv2.rectangle(img, (x, y), (x+w, y+h), color=128, thickness=2)
cv2.imshow("ROI", roi)
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述示例中,我们首先定义了感兴趣区域的边界点 `roi_points`,然后创建了一个空白图像 `img`。接下来,我们使用 `cv2.fillPoly` 函数填充感兴趣区域,然后定义一个点 `point`。通过调用 `cv2.pointPolygonTest` 函数,我们判断该点是否在感兴趣区域内,并根据返回值进行相应的处理。最后,我们使用 `cv2.boundingRect` 函数提取感兴趣区域的位置信息,并在图像上可视化结果。
以上示例仅为参考,您可以根据自己的需求进行修改和扩展。希望能对您有所帮助!