00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00038 #include <stdio.h>
00039 #include <stdlib.h>
00040 #include <iostream>
00041 #include <QDebug>
00042
00043 #include <qvcore/qvapplication.h>
00044 #include <qvcameras/qvmplayercamera.h>
00045 #include <qvgui/qvgui.h>
00046
00047 #include <qvdta/qvpolyline.h>
00048 #include <qvdta/qvdta.h>
00049
00051 class MyWorker: public QVWorker
00052 {
00053 public:
00054 MyWorker(QString name): QVWorker(name)
00055 {
00056 addProperty("Window size", inputFlag, 10, "window size ", 1, 100);
00057 addProperty< QVImage<uChar,1> >("Input image", inputFlag|outputFlag);
00058 addProperty< QVImage<uChar,1> >("Corner response image", outputFlag);
00059 addProperty< QVImage<uChar,3> >("Corners", outputFlag);
00060 }
00061
00062 void iterate()
00063 {
00064 int sizeMax = getPropertyValue<int>("Window size");
00065
00066 QVImage<uChar> image = getPropertyValue< QVImage<uChar,1> >("Input image");
00067 uInt rows = image.getRows(), cols = image.getCols();
00068 timeFlag("grab Frame");
00069
00071
00072 QVImage<sFloat> eigval(cols, rows);
00073 HarrisCornerResponseImage(image, eigval);
00074 timeFlag("Corner response image");
00075
00076 QVImage<uChar,1> eigvalUChar = eigval, equalizedEigval(cols, rows);
00077 equalizeHistogram(eigvalUChar, equalizedEigval);
00078
00079 setPropertyValue< QVImage<uChar,1> >("Corner response image", equalizedEigval);
00080 timeFlag("Show corner response");
00081
00083
00084 QVImage<uChar> hotpoints(cols, rows);
00085 FilterLocalMax(eigval, hotpoints, sizeMax, sizeMax);
00086
00087
00088 QList<QPoint> hotPoints;
00089 QVIMAGE_INIT_READ(uChar,hotpoints);
00090 for(uInt row = 0; row < hotpoints.getRows(); row++)
00091 for(uInt col = 0; col < hotpoints.getCols(); col++)
00092 if (QVIMAGE_PIXEL(hotpoints, col, row,0))
00093 hotPoints.append(QPoint(col, row));
00094 timeFlag("Local maximal filter");
00095
00097 QVImage<uChar,3> destino = image;
00098 drawPoints(hotPoints, destino);
00099 setPropertyValue< QVImage<uChar,3> >("Corners", destino);
00100 timeFlag("Draw corners");
00101
00103
00104
00105
00106
00107
00108
00110
00111
00112
00113
00114
00115 }
00116 };
00117
00118 int main(int argc, char *argv[])
00119 {
00120 QVApplication app(argc, argv,
00121
00122 "Example program for QVision library. Applies corner detection over an input video."
00123
00124 );
00125
00126 QVMPlayerCamera camera("Video");
00127 MyWorker worker("Corners Worker");
00128 camera.link(&worker,"Input image");
00129
00130 QVGUI interface;
00131
00132 QVImageCanvas imageCanvas("Corners");
00133 imageCanvas.linkProperty(worker, "Corners");
00134
00135 return app.exec();
00136 }
00137