3 Star 15 Fork 8

闪电侠的右手/image_processing_platform

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

图像处理与标注集成系统 Integrated system of image processing and annotation

项目需求

  • 实验室需要一个图像处理平台来对实验的图片做处理,并希望该平台可以将实验室前期的图像算法成果集成在内
  • 期望有图像标注系统

项目说明

  • 在CSDN上发现一个效果相对满足需求的图像处理软件,原作者为笔尖,原作的github链接,在此项目基础上做了大量的修改,在修改之前,也征得了原作者的同意。
  • 本项目使用C++ Qt5实现客户端服务。

界面示意图

<img alt="主界面">

<img alt="标注界面">

主要改进

  • 添加了通道直方图效果,可以根据显示的图片实时完成效果显示,并自动根据通道数量调整曲线数量。还可以手动点选legend来控制对应的曲线是否显示
  • 从json文件中读取并载入配置
  • 修改了原历史存储方案,设置一个历史存储器最大存储量
  • 添加了深度学习方法对图像处理的接口,通过C/S模式完成交互
  • 添加了图像级标签标注系统,可以通过快捷键方式快速完成标注图像类别

项目扩展的方法

由于原始项目代码结构很乱,也不方便修改。此处做个总结记录,方便他人快速上手。用“深度处理->目标检测->SSD模型”做例子

菜单项扩展
  • 首先要定义菜单项,即“SSD模型”项
QAction *Act_Detect_SSD = new QAction(tr("SSD模型"), this); // 菜单项
connect(Act_Detect_SSD, SIGNAL(triggered()), I_MainWindow, SLOT(deep_detect_ssd())); // 绑定点击菜单项的信号槽, deep_detect_ssd函数就是点击该项去执行的槽函数
  • 然后定义“目标检测”,这里定义该项为一级菜单
// 菜单项添加到一级菜单中
menu_deep_detect = new QMenu();  // 此处为头文件中定义的指针,用来添加最后一级的菜单项,比如“SSD模型”、“YOLO模型”等
QAction *Act_detects = new QAction(tr("目标检测"), this);
//action添加menu 当且仅当菜单项有子选项时,才需要setMenu
Act_detects->setMenu(menu_deep_detect);
// “目标检测”将一级菜单项“SSD模型”添加进来
menu_deep_detect->addAction(Act_Detect_SSD);
  • 最后将菜单项“深度处理”添加到菜单栏中
QMenu *deep = addMenu(tr("深度处理"));
deep->addAction(Act_detects);
深度处理接口扩展
  • 仍以ssd为例,在MainWindow.cpp文件中定义了deep_detect_ssd()方法,即上述中所指的槽函数
  • 首先实例化深度对象DeepProcess,该对象实现了客户端与服务器之间的交互,通过post方式将图片base64编码的json字符串数据包提交给服务器,服务器响应base64,客户端解析即可
DeepProcess *ssd;
ssd = new DeepProcess("ssd", "detect/ssd", this);// detect/ssd为服务器端的ssd方法的url
  • 然后获取当前图片有两种方法,一种是从历史记录中选取,historyClass->getCurrentImage(),另一种是直接选择label中显示的图片,imgLabel->getImage()。在设计的时候主要是遇到了问题,对图片的几何放缩特别消耗资源,所以让几何变换的结果不存入历史记录,如果有必要使其存储,可以点击“记录图像”按钮。后续对其扩展开发需要注意。
QImage current = imgLabel->getImage(); // 此处使用此方法获取当前图像
  • 最后要绑定深度方法返回的图像结果的信号槽,绑定后执行post方法进行交互
connect(ssd, SIGNAL(responseImage(QImage, QString)), this, SLOT(process_response(QImage, QString)));
ssd->post(current, "hello"); // "hello"是方法提供的额外参数,可以扩展为 向服务器发送的客户机id、密钥等信息,供服务器验证
深度处理的服务器接口说明
  • 使用的python3的flask框架搭建服务器,主要是使用两个文件app.py和utils.py
  • utils.py主要做了图像编解码的工作
import cv2
import base64
import numpy as np

def cv2_base64(image):
    base64_str = cv2.imencode('.jpg', image)[1].tostring()
    base64_str = base64.b64encode(base64_str)
    return str(base64_str).lstrip("b'")


##base64转cv2
def base64_cv2(base64_str):
    imgString = base64.b64decode(base64_str)
    nparr = np.fromstring(imgString, np.uint8)
    image = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
    return image
  • app.py 就是服务器的入口,需要定义深度模型的接口,下面对ssd模型举例
from flask import Flask, jsonify, request
import utils
import cv2

app = Flask(__name__)
@app.route("/detect/ssd", methods=['POST'])
def ssd():
    data = request.json
    img = data['image'] # 获取post过来的图像和msg信息
    msg = data['msg']
    
    try:
        # 将图像转化
        image = utils.base64_cv2(img)
        # 模型处理
        image = ssd(image)    # 返回的应该是cv2 ndarrray的图像
        # 将结果返回
        return jsonify({"image": utils.cv2_base64(image), "msg": "OK", "code": 200})
    except Exception as e:
        print(e)
        return jsonify({"code": 500, "msg": str(e)})

if __name__ == '__main__':
    app.run(debug=True)

标注系统的相关说明

  • 相关的组件都是在ui文件中进行绘制
  • 相关的快捷键在菜单栏帮助-快捷键说明中可以查找
  • 设置了一个标注缓存的存储区可存储的最大数,存储区满就会将存储的标注写入文件,避免对文件频繁写入
  • 标注系统的主题与主界面的主题保持一致
  • 可以动态的在类别表格中添加行数
  • 类别可多选

todo

  • 继续丰富深度处理的接口,使其功能更加完善
  • 标注系统的标注最大存储数应从配置文件中读取,并能修改
  • 可以进一步集成视频处理及标注系统
  • 资源使用方面需进一步优化,可从对ImageProcessing类的简化工作开始
MIT License Copyright (c) 2020 shaoeric Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

c++ qt5 opencv实现的图像处理与标注系统 展开 收起
README
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/shaoeric/image_processing_platform.git
git@gitee.com:shaoeric/image_processing_platform.git
shaoeric
image_processing_platform
image_processing_platform
master

搜索帮助