背景
参见LinkSVP例子之一背静介绍。
LinkSVP简介
参见LinkSVP例子之一LinkSVP
介绍。
MotionDetect实现移动检测示例
该示例程序演示了如何使用LinkIVE进行一个相对完整的移动检测功能开发。
准备工作
- 参照用户手册搭建开发环境、编译3531D工程、配置网络启动参数。
- 将带有HDMI输出功能的设备(如摄像机、笔记本、机顶盒等)接入评估板的HDMI-A接口
- 将评估板的HDMI-OUT接显示器(支持1080P即可,程序默认输出1080P60)。
- 上电,进入
/root/demo
目录 - 运行
MotionDetect
程序
运行结果
完整工程
完整工程参见:https://gitee.com/LinkPi/LinkSVP/tree/master/MotionDetect
主要源代码
main.cpp
#include <QCoreApplication>
#include "Link.h"
#include "MotionDetect.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Link::init();
LinkObject *vi=Link::create("InputVi");
QVariantMap dataVi;
dataVi["interface"]="HDMI-A";
vi->start(dataVi);
MotionDetect *MD=new MotionDetect();
QVariantMap dataMD;
dataMD["framerate"]=4;
MD->start(dataMD);
LinkObject *vo=Link::create("OutputVo");
QVariantMap dataVo;
dataVo["type"]="hdmi";
vo->start(dataVo);
vi->linkV(MD)->linkV(vo);
return a.exec();
}
MotionDetect.cpp
#include "MotionDetect.h"
MotionDetect::MotionDetect(QObject *parent) : LinkFrame(parent)
{
data["framerate"]=4;
data["width"]=640;
data["height"]=360;
data["thresh"]=30;
data["area"]=800;
mem["pre"]=IVEMem(640,360);
mem["ccl"]=IVEMem(640,360);
}
void MotionDetect::oneFrame()
{
Sub(mem["in"],mem["pre"],mem["out"]);
thresh(mem["out"],mem["out"],data["thresh"].toInt());
erode(mem["out"],mem["out"],3);
dilate(mem["out"],mem["out"],5);
copy(mem["out"],mem["ccl"]);
wait();
QVariantList list=CCL(mem["ccl"],data["area"].toInt());
copy(mem["in"],mem["pre"]);
wait();
if(list.count()>0)
{
qDebug("######################################");
for(int i=0;i<list.count();i++)
{
qDebug()<<list[i];
}
}
}