# Machine Vision **Repository Path**: aghxjjaj21/machine-vision ## Basic Information - **Project Name**: Machine Vision - **Description**: 机器视觉项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-10 - **Last Updated**: 2026-02-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 机器视觉系统 ## 项目介绍 本项目是一个基于Qt框架开发的机器视觉应用程序,支持多种工业相机(包括Basler相机和海康威视相机)的接入与控制,提供实时图像采集、帧捕获、连续采集、图像处理等功能。系统采用分层架构设计,具有良好的扩展性和可维护性。 ## 软件架构 项目采用分层架构设计,主要包含以下核心模块: ### 设备管理层 (DeviceManager) - 设备管理单例类,负责相机的创建、获取和释放 - 提供设备的添加、查询和释放功能 - 支持多种设备的统一管理 ### 相机抽象层 (Camera) - 相机基类,定义通用接口 - 为不同相机类型提供统一的操作接口 - 包含打开相机、关闭相机、获取帧、捕获图像、停止采集等基础方法 ### 相机实现层 - **Basler相机实现 (baslerUSB)**:针对Basler USB相机的具体实现 - 支持打开/关闭相机 - 单帧采集和连续采集 - 帧获取和停止采集 - **海康相机实现 (HK_Camera)**:针对海康威视相机的具体实现 - 支持打开/关闭相机 - 重置采集状态 - 单帧采集和连续采集 - 帧获取和停止采集 - 离线模式支持 ### 图像处理层 (ImageProcess) - 图像处理核心类,提供多种图像处理功能 - 支持模板匹配 (objectMatching) - 支持条码识别 (barCodeRecognition) - 图像处理回调机制 - 支持Halcon图像处理库集成 ### 主界面层 (MachinewVision) - 基于Qt的主窗口程序,提供图形化操作界面 - 多线程图像显示和处理 - 相机选择和图像保存路径设置 - 离线模式支持 - 服务器连接和通信功能 ### 工具管理层 (ImageToolPara) - 图像工具参数配置界面 - 模板创建和管理 - 条码识别参数配置 - XML配置读写功能 ## 技术栈 - **开发框架**:Qt5/Qt6 - **编程语言**:C++ - **相机SDK**:Basler pylon SDK、海康威视机器视觉SDK MVS - **构建工具**:Visual Studio 2022 + Qt VS Tools - **图像处理**:OpenCV、HalconCpp - **通信协议**:Socket网络通信 - **数据格式**:JSON、XML ## 功能特性 - **多相机支持**:同时支持Basler和海康威视等多种工业相机 - **实时图像显示**:采用多线程机制实现流畅的实时视频显示 - **多种采集模式**: - 单帧采集:获取单张图像并保存 - 连续采集:实时显示视频流 - **相机控制**:灵活的相机开关控制 - **图像回调处理**:高效的图像数据回调机制 - **离线模式**:支持离线图像处理 - **图像保存**:自定义保存路径,支持图像保存功能 - **图像处理功能**: - 模板匹配(形状匹配) - 条码识别 - 实时图像处理 - **网络通信**: - 服务器连接管理 - 数据发送和接收 - 心跳保活机制 - **配置管理**: - XML配置文件读写 - 参数保存和加载 - 模型文件管理 ## 环境要求 ### 操作系统 - Windows 10/11 操作系统 ### 开发环境 - Visual Studio 2022 (或兼容版本) - Qt 5.15 或更高版本(推荐Qt 5.15.2) - Qt VS Tools插件 ### 相机SDK - Basler pylon SDK - 海康威视机器视觉SDK MVS ### 依赖库 - OpenCV - HalconCpp (可选,用于高级图像处理) - nlohmann::json - tinyxml2 ## 安装教程 ### 1. 安装开发工具 - 下载并安装 Visual Studio 2022 - 下载并安装 Qt 开发环境(选择与VS2022匹配的版本) - 安装Qt VS Tools插件 ### 2. 安装相机SDK - 安装 Basler pylon SDK - 安装海康威视机器视觉SDK MVS ### 3. 配置项目 ``` 1. 打开 MachinewVision.vcxproj 文件 2. 确保项目属性中Qt配置正确 3. 配置相机SDK的Include和Library路径 4. 配置OpenCV和Halcon的Include和Library路径 5. 设置环境变量(如果需要) ``` ### 4. 编译项目 - 选择合适的编译配置(Debug/Release) - 编译项目生成可执行文件 ## 使用说明 ### 1. 启动程序 运行编译生成的 `MachinewVision.exe` 程序 ### 2. 连接相机 - 点击"打开相机"连接相机设备 - 从下拉菜单选择要使用的相机 ### 3. 选择采集模式 - **单帧采集**:点击获取单张图像 - **连续采集**:实时显示视频流 ### 4. 控制采集 - 点击"停止采集"暂停图像获取 - 点击"关闭相机"断开连接 ### 5. 图像保存 - 点击"选择路径"设置保存目录 - 采集的图像将自动保存到指定目录 ### 6. 离线模式 - 点击"离线模式"切换到离线图像处理 ### 7. 图像处理功能 - 点击"参数设置"打开图像处理参数配置界面 - 加载模板文件进行模板匹配 - 配置条码识别参数 - 查看处理结果 ## 项目结构 ``` ├── BaslerCamera.cpp/h # Basler相机具体实现 ├── HKcamera.cpp/h # 海康威视相机具体实现 ├── Camera.h # 相机抽象基类定义 ├── Device.h # 设备抽象基类定义 ├── instructment.cpp/h # 设备管理器实现 ├── MachinewVision.cpp/h # 主窗口程序实现 ├── ImageProcess.cpp/h # 图像处理核心类 ├── ImageToolPara.cpp/h # 图像工具参数配置 ├── ListImageWidget.cpp/h # 图像列表控件 ├── ListImageItem.cpp/h # 图像列表项控件 ├── Task.cpp/h # 任务执行类和Base64编解码 ├── socket_client.cpp/h # Socket客户端实现 ├── XMLConfigOperator.cpp/h # XML配置操作类 ├── imagesData.h # 数据结构定义 ├── main.cpp # 程序入口文件 ├── MachinewVision.ui # Qt UI界面文件 ├── MachinewVision.qrc # 资源文件 ├── MachinewVision.vcxproj # Visual Studio项目文件 ├── ImageXML.xml # XML配置文件 ├── barCodeModel.bar # 条码识别模型文件 ├── shapeModel.mod # 形状匹配模型文件 ├── json.hpp # JSON库 ├── tinyxml2.cpp/h # XML解析库 └── README.md # 项目说明文档 ``` ## 核心类说明 ### Camera (相机基类) 所有相机类的基类,定义了相机的通用接口。 ### baslerUSB (Basler相机类) 继承自Camera类,实现Basler USB相机的具体操作。 ### HK_Camera (海康相机类) 继承自Camera类,实现海康威视相机的具体操作,支持离线模式。 ### DeviceManager (设备管理器) 单例类,负责设备的创建、添加、查询和释放。 ### MachinewVision (主窗口类) Qt主窗口,包含所有UI事件处理和多线程图像处理逻辑。 ### ImageProcess (图像处理类) 负责图像处理的核心功能,包括模板匹配和条码识别。 ### ImageToolPara (图像工具参数类) 提供图像处理参数的配置界面和参数管理功能。 ### SocketClient (Socket客户端类) 负责网络通信功能,包括服务器连接、数据收发和心跳保活。 ### Task (任务执行类) 执行具体任务,包括图像采集线程和Base64编解码功能。 ### XMLConfigOperator (XML配置操作类) 负责XML配置文件的读写操作。 ## API参考 ### Camera类 ```cpp virtual bool openCam() // 打开相机 virtual bool closeCam() // 关闭相机 virtual bool getFrame() // 获取帧数据 virtual bool snapCap() // 捕获图像 virtual bool stopCap() // 停止采集 ``` ### DeviceManager类 ```cpp static DeviceManager* getInstance() // 获取单例实例 Camera* createCamIns(int nCamType) // 创建相机实例 void addDevice(Device* dev, int nDevInsType) // 添加设备 Device* getDevice(int nDevTypeIns) // 获取设备 void releaseDevInst() // 释放设备实例 ``` ### ImageProcess类 ```cpp void pushImage(Mat& img) // 推送图像到处理队列 void processThreadFunc() // 图像处理线程函数 void objectMatching(cv::Mat& image, std::string& resultInfo) // 模板匹配 void barCodeRecognition(cv::Mat& image, std::string& resultInfo) // 条码识别 ``` ### SocketClient类 ```cpp bool createSocketConnect() // 创建Socket连接 bool sendData(const char* sendbuf) // 发送数据 void recData(void* p) // 接收数据 void keepAlive(void* p) // 心跳保活 ``` ## 常见问题 ### 1. 相机无法打开 - 检查相机SDK是否正确安装 - 确认相机已连接到电脑 - 检查相机权限设置 ### 2. 图像显示延迟 - 检查电脑性能是否满足要求 - 调整采集参数和显示设置 ### 3. 编译错误 - 确保Qt环境配置正确 - 检查相机SDK路径设置 - 查看错误信息并安装缺失的依赖 ### 4. 图像处理功能异常 - 检查OpenCV和Halcon库是否正确配置 - 确认模型文件路径是否正确 - 查看图像处理日志获取详细信息 ### 5. 网络通信失败 - 检查服务器地址和端口是否正确 - 确认防火墙设置 - 查看网络连接状态 ## 参与贡献 1 2. 新建 Feat_. Fork 本仓库xxx 功能分支 3. 提交代码 4. 新建 Pull Request ## 许可证 本项目仅供学习和研究使用。 ## 联系方式 如有问题或建议,请通过Gitee平台提交Issue。