00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00041
00042 #ifndef DOXYGEN_IGNORE_THIS
00043
00044 #include <QVApplication>
00045 #include <QVMPlayerCamera>
00046 #include <QVDefaultGUI>
00047 #include <QVImageCanvas>
00048 #include <QVCannyEdgeDetector>
00049 #include <QVImageRetarderWorker>
00050 #include <qvippworkers.h>
00051
00053 #include <QVPolyline>
00054 class MovingEdgesDetector: public QVWorker
00055 {
00056 public:
00057 MovingEdgesDetector(QString name): QVWorker(name)
00058 {
00059 addProperty< QList<QVPolyline> >("Image borders", inputFlag);
00060 addProperty< QVImage<uChar,1> >("Movement image", inputFlag);
00061 addProperty< QVImage<uChar,1> >("Moving borders image", outputFlag);
00062 }
00063
00064 void iterate()
00065 {
00066
00067 const QList< QVPolyline > imageBorders = getPropertyValue< QList<QVPolyline> >("Image borders");
00068 const QVImage<uChar,1> movementImage = getPropertyValue< QVImage<uChar,1> >("Movement image");
00069
00070
00071 QVImage<uChar,1 > movingBordersImage(movementImage.getCols(), movementImage.getRows());
00072 Set(0, movingBordersImage);
00073
00074
00075
00076 foreach(QVPolyline edge, imageBorders)
00077 foreach(QPoint edgePoint, edge)
00078 if (movementImage(edgePoint) > 10)
00079 movingBordersImage(edgePoint) = 255;
00080
00081
00082 setPropertyValue< QVImage<uChar,1> >("Moving borders image", movingBordersImage);
00083 timeFlag("Publish resulting images");
00084 }
00085 };
00086
00087 int main(int argc, char *argv[])
00088 {
00089 QVApplication app(argc, argv,
00090 "Example program for QVision library. Obtains several features from input video frames."
00091 );
00092
00093 QVDefaultGUI interface;
00094
00095 QVMPlayerCamera camera("Video");
00096
00097 QVCannyEdgeDetector cannyWorker("Canny worker");
00098 camera.linkProperty(&cannyWorker, "Input image");
00099
00100 QVImageCanvas cannyDisplayer("Canny");
00101 cannyWorker.linkProperty("Input image", cannyDisplayer);
00102 cannyWorker.linkProperty("Output contours", cannyDisplayer);
00103
00104 QVImageRetarderWorker<uChar,1> retarderWorker("Image retarder worker");
00105 camera.linkProperty(&retarderWorker, "Input image");
00106
00107 QVIPPAbsDiffWorker<uChar,1> absDiffWorker("Absolute difference worker");
00108 camera.linkProperty(&absDiffWorker, "src1");
00109 retarderWorker.linkProperty("Output image", &absDiffWorker, "src2", QVWorker::SynchronousLink);
00110
00111 QVImageCanvas movementDisplayer("Movement detector");
00112 absDiffWorker.linkProperty("dest", movementDisplayer);
00113
00115 MovingEdgesDetector movingEdgesDetector("Moving edges detector");
00116 cannyWorker.linkProperty("Output contours", &movingEdgesDetector, "Image borders", QVWorker::SynchronousLink);
00117 absDiffWorker.linkProperty("dest", &movingEdgesDetector, "Movement image", QVWorker::SynchronousLink);
00118
00119 QVImageCanvas edgeMovementDisplayer("Movement detector");
00120 movingEdgesDetector.linkProperty("Moving borders image", edgeMovementDisplayer);
00121
00122 return app.exec();
00123 }
00124
00125 #endif