opencv-mcp-server
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"opencv": {
"args": [
"opencv-mcp-server"
],
"command": "uvx"
}
}
}
服务介绍
🚀 OpenCV MCP Server
MCP 服务器提供强大的 OpenCV 计算机视觉功能,适用于 AI 助手。
🔍 简介
OpenCV MCP 服务器是一个 Python 包,通过 Model Context Protocol (MCP) 提供 OpenCV 的图像和视频处理能力。这使得 AI 助手和语言模型能够访问从基本的图像处理到高级的对象检测和跟踪的强大计算机视觉工具。
通过 OpenCV MCP 服务器,AI 系统可以:
- 处理和分析各种格式的图像
- 执行实时对象检测和跟踪
- 从视觉数据中提取有意义的信息
- 使用高级算法增强和转换图像
- 逐帧分析视频内容
✨ 特性
- 📸 基本的图像处理和操作(读取、保存、转换)
- 🖼️ 图像处理和增强(调整大小、裁剪、应用滤镜)
- 📊 边缘检测和轮廓分析
- 🧠 高级计算机视觉功能(特征检测、对象检测)
- 😃 面部检测和识别
- 🎬 视频处理和分析(帧提取、运动检测)
- 🔍 视频中的对象跟踪
- 📹 摄像头集成用于实时对象检测
📊 演示示例
边缘检测

面部检测

统计分析

视频处理

原始视频样本

轮廓检测处理

上述原始视频应用轮廓检测处理的示例
📦 安装
pip install opencv-mcp-server
对于开发:
# Clone the repository
git clone https://github.com/yourusername/opencv-mcp-server.git
cd opencv-mcp-server
# Create a virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
pip install -e .
🔧 使用方法
在 Claude Desktop 中使用
将以下内容添加到您的 Claude Desktop 配置中:
{
"tools": {
"opencv": {
"command": "uvx",
"args": [
"opencv-mcp-server"
]
}
}
}
基本的 Python 使用
from opencv_mcp_server import opencv_client
# Initialize client
client = opencv_client.OpenCVClient()
# Use tools
result = client.resize_image(
image_path="input.jpg",
width=800,
height=600
)
高级对象检测示例
由于所有需要的模型已经在 OPENCV_DNN_MODELS_DIR 中配置好,您可以直接使用对象检测而无需指定模型路径:
# Detect objects using pre-configured YOLO model
result = detect_objects_tool(
image_path="street.jpg",
confidence_threshold=0.5,
nms_threshold=0.4
)
配置
服务器可以通过环境变量进行配置:
MCP_TRANSPORT: 传输方式(默认: "stdio")OPENCV_DNN_MODELS_DIR: 存储 DNN 模型的目录(默认: "models")CV_HAAR_CASCADE_DIR: 存储 Haar 级联文件的目录(可选)
🧠 模型文件设置
计算机视觉和对象检测工具需要预训练模型才能正常工作。这些模型应放置在由 OPENCV_DNN_MODELS_DIR 环境变量指定的目录中(默认: "./models")。
所需模型
以下模型已经预先配置:
-
面部检测(DNN 方法)
deploy.prototxt- 面部检测配置res10_300x300_ssd_iter_140000.caffemodel- 面部检测模型权重
-
对象检测(YOLO)
yolov3.weights- YOLO 模型权重yolov3.cfg- YOLO 配置文件coco.names- 检测到的对象类别名称
模型使用
- 当指定
method="dnn"时,detect_faces_tool使用 DNN 模型 detect_objects_tool使用 YOLO 模型进行通用对象检测
对于需要下载这些模型的用户,请参阅“安装”部分或访问:
- YOLO 模型: https://pjreddie.com/darknet/yolo/
- 面部检测模型: https://github.com/opencv/opencv_3rdparty/tree/dnn_samples_face_detector_20170830
🧰 可用工具
OpenCV MCP 服务器提供了广泛的计算机视觉工具,分为四个类别:
📸 图像基础
这些工具提供基本的图像处理能力:
-
save_image_tool: 将图像保存到文件- 参数:path_in(输入图像路径),path_out(输出文件路径)- 返回值:图像保存状态和路径信息
- 示例:
save_image_tool(path_in="processed.jpg", path_out="final.jpg")
-
convert_color_space_tool:在不同颜色空间之间转换图像(BGR、RGB、GRAY、HSV 等)- 参数:
image_path,source_space,target_space - 返回值:转换后的图像信息和路径
- 示例:
convert_color_space_tool(image_path="image.jpg", source_space="BGR", target_space="HSV")
- 参数:
-
resize_image_tool:将图像调整为特定尺寸- 参数:
image_path,width,height,interpolation(可选) - 返回值:调整大小后的图像信息和路径
- 示例:
resize_image_tool(image_path="large.jpg", width=800, height=600)
- 参数:
-
crop_image_tool:从图像中裁剪一个区域- 参数:
image_path,x,y,width,height - 返回值:裁剪后的图像信息和路径
- 示例:
crop_image_tool(image_path="scene.jpg", x=100, y=150, width=300, height=200)
- 参数:
-
get_image_stats_tool:获取关于图像的统计信息- 参数:
image_path,channels(布尔值,默认为 true) - 返回值:图像统计数据和直方图可视化
- 示例:
get_image_stats_tool(image_path="photo.jpg", channels=True)
- 参数:
🖼️ 图像处理
这些工具提供了高级的图像处理和变换能力:
-
apply_filter_tool:对图像应用各种滤波器(模糊、高斯、中值、双边)- 参数:
image_path,filter_type,kernel_size,以及特定于滤波器的参数 - 返回值:过滤后的图像和滤波器信息
- 示例:
apply_filter_tool(image_path="noisy.jpg", filter_type="gaussian", kernel_size=5)
- 参数:
-
detect_edges_tool:使用不同的方法检测图像中的边缘(Canny、Sobel、Laplacian、Scharr)- 参数:
image_path,method,阈值参数,以及特定于方法的参数 - 返回值:边缘检测后的图像和方法信息
- 示例:
detect_edges_tool(image_path="objects.jpg", method="canny", threshold1=100, threshold2=200)
- 参数:
-
apply_threshold_tool:对图像应用阈值(二值化、自适应等)- 参数:
image_path,threshold_type,阈值和特定于方法的参数 - 返回值:阈值处理后的图像和阈值信息
- 示例:
apply_threshold_tool(image_path="scan.jpg", threshold_type="binary", threshold_value=127)
- 参数:
-
detect_contours_tool:检测并在图像中绘制轮廓- 参数:
image_path,mode,method,绘制参数 - 返回值:带有轮廓的图像和轮廓信息
- 示例:
detect_contours_tool(image_path="shapes.jpg", mode="external", method="simple")
- 参数:
-
find_shapes_tool:在图像中查找基本形状(圆、线)- 参数:
image_path,shape_type,特定于形状的参数 - 返回值:带有形状的图像和形状信息
- 示例:
find_shapes_tool(image_path="geometry.jpg", shape_type="circles", min_radius=10)
- 参数:
-
match_template_tool:在图像中查找模板- 参数:
image_path,template_path,匹配参数 - 返回值:带有匹配结果的图像和匹配信息
- 示例:
match_template_tool(image_path="scene.jpg", template_path="object.jpg", threshold=0.8)
- 参数:
🧠 计算机视觉
这些工具提供了高级计算机视觉能力:
-
detect_features_tool:使用 SIFT、ORB、BRISK 等方法检测图像中的特征- 参数:
image_path,method,max_features,绘制参数 - 返回值:带有关键点的图像和特征信息
- 示例:
detect_features_tool(image_path="landmark.jpg", method="sift", max_features=500)
- 参数:
-
match_features_tool:在两张图像之间匹配特征- 参数:
image1_path,image2_path,method,匹配参数 - 返回值:带有匹配结果的图像和匹配信息- 示例:
match_features_tool(image1_path="scene1.jpg", image2_path="scene2.jpg", method="sift")
- 参数:
-
detect_faces_tool: 使用 Haar 级联或 DNN 在图像中检测人脸- 参数:
image_path,method, 方法特定参数 - 返回:带有脸部和脸部信息的图像
- 示例:
detect_faces_tool(image_path="group.jpg", method="haar", min_neighbors=5)
- 参数:
-
detect_objects_tool: 使用预训练的 DNN 模型(例如 YOLO)检测物体- 参数:
image_path, 模型路径, 检测参数 - 返回:带有物体和物体信息的图像
- 示例:
detect_objects_tool(image_path="street.jpg", confidence_threshold=0.5)
- 参数:
🎬 视频处理
这些工具提供了视频分析和处理功能:
-
extract_video_frames_tool: 从视频文件中提取帧- 参数:
video_path, 帧选择参数 - 返回:提取的帧信息和路径
- 示例:
extract_video_frames_tool(video_path="clip.mp4", start_frame=0, step=10, max_frames=20)
- 参数:
-
detect_motion_tool: 检测两帧之间的运动- 参数:
frame1_path,frame2_path, 检测参数 - 返回:运动检测结果和可视化
- 示例:
detect_motion_tool(frame1_path="frame1.jpg", frame2_path="frame2.jpg", threshold=25)
- 参数:
-
track_object_tool: 跨视频帧跟踪物体- 参数:
video_path,initial_bbox, 跟踪参数 - 返回:跟踪结果和提取的帧
- 示例:
track_object_tool(video_path="tracking.mp4", initial_bbox=[100, 100, 50, 50])
- 参数:
-
combine_frames_to_video_tool: 将帧合并成视频文件- 参数:
frame_paths,output_path, 视频参数 - 返回:视频创建结果
- 示例:
combine_frames_to_video_tool(frame_paths=["frame1.jpg", "frame2.jpg"], output_path="output.mp4")
- 参数:
-
create_mp4_from_video_tool: 将视频文件转换为 MP4 格式- 参数:
video_path,output_path, 转换参数 - 返回:转换结果,包括 MP4 路径
- 示例:
create_mp4_from_video_tool(video_path="input.avi", output_path="output.mp4")
- 参数:
-
detect_video_objects_tool: 在视频中检测物体并创建一个包含检测结果的视频- 参数:
video_path, 模型路径, 检测参数 - 返回:物体检测结果和输出视频路径
- 示例:
detect_video_objects_tool(video_path="traffic.mp4", confidence_threshold=0.5)
- 参数:
-
detect_camera_objects_tool: 从计算机摄像头检测物体并保存到视频- 参数:
camera_id, 录制参数, 模型路径, 检测参数 - 返回:物体检测结果和输出视频路径
- 示例:
detect_camera_objects_tool(camera_id=0, duration=30, confidence_threshold=0.5)
- 参数:
📝 高级使用示例
📸 基本图像处理
# Resize an image
result = resize_image_tool(
image_path="input.jpg",
width=800,
height=600
)
# Access the resized image path
resized_image_path = result["output_path"]
# Apply a Gaussian blur filter
result = apply_filter_tool(
image_path="input.jpg",
filter_type="gaussian",
kernel_size=5,
sigma=1.5
)
🧠 物体检测
# Detect objects in an image using YOLO
result = detect_objects_tool(
image_path="scene.jpg",
confidence_threshold=0.5,
nms_threshold=0.4
)
# Access detected objects
objects = result["objects"]
for obj in objects:
print(f"Detected {obj['class_name']} with confidence {obj['confidence']}")
🎬 视频分析
# Extract frames from a video
result = extract_video_frames_tool(
video_path="input.mp4",
start_frame=0,
step=10,
max_frames=10
)
# Access extracted frames
frames = result["frames"]
# Detect objects in a video
result = detect_video_objects_tool(
video_path="input.mp4",
confidence_threshold=0.5,
frame_step=5
)
🔄 连接操作
可以通过将一个工具的 output_path 作为另一个工具的输入来连接多个工具:
# First resize an image
result1 = resize_image_tool(
image_path="input.jpg",
width=800,
height=600
)
# Then apply edge detection to the resized image
result2 = detect_edges_tool(
image_path=result1["output_path"],
method="canny",
threshold1=100,
threshold2=200
)
# Finally detect contours in the edge-detected image
result3 = detect_contours_tool(
image_path=result2["output_path"],
mode="external",
method="simple"
)
🔍 实际应用
OpenCV MCP Server 可用于广泛的应用场景:
- 🤖 自主系统:基于视觉的导航和障碍物检测
- 🚗 交通分析:车辆计数、速度估计和车牌识别
- 🔐 安全系统:运动检测和面部识别
- 📱 增强现实:特征跟踪和姿态估计
- 🏥 医学成像:组织分割和异常检测
- 🏭 工业检测:缺陷检测和质量控制
- 🖼️ 数字艺术:图像滤波和变换
- 🎲 游戏:手势识别和玩家跟踪
🗺️ 发展路线图
计划中的 OpenCV MCP Server 未来增强功能:
- 📊 额外的统计分析工具
- 🧬 高级分割算法
- 🧠 与机器学习模型集成- 🌐 3D 视觉功能
- 📱 适合移动设备的处理选项
- ⚡ 针对实时处理的性能优化
🤝 贡献
欢迎贡献!请随时提交 Pull Request。
- Fork 项目
- 创建你的特性分支 (
git checkout -b feature/amazing-feature) - 提交你的更改 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 打开一个 Pull Request
📜 许可证
MIT 许可证 - 详情请参阅 LICENSE 文件。
📞 联系
如有关于问题或反馈,请在 GitHub 仓库中打开一个 issue。
用 ❤️ 和 OpenCV 及 Python 构建。