00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00040 #include <QVDesignerGUI>
00041 #include <QVApplication>
00042 #include <QVCannyEdgeDetector>
00043 #include <QVMPlayerReaderBlock>
00044 #include <QVImageCanvas>
00045
00046 #include <QVProcessingBlock>
00047 #include <qvip.h>
00048 #include <qvipp.h>
00049 #include <qvmath.h>
00050 #include <QV2DMap>
00051
00052 #ifndef DOXYGEN_IGNORE_THIS
00053 class QVSplitC3ImageUChar: public QVProcessingBlock
00054 {
00055 public:
00056 QVSplitC3ImageUChar(QString name = QString()): QVProcessingBlock(name)
00057 {
00058
00059 addProperty< QVImage<uChar,3> >("Input image", inputFlag|outputFlag);
00060
00061
00062 addProperty< QVImage<uChar,1> >("Channel 1 image", outputFlag);
00063 addProperty< QVImage<uChar,1> >("Channel 2 image", outputFlag);
00064 addProperty< QVImage<uChar,1> >("Channel 3 image", outputFlag);
00065 }
00066
00067 void iterate()
00068 {
00069
00070 const QVImage<uChar,3> image = getPropertyValue< QVImage<uChar,3> >("Input image");
00071 QVImage<uChar,1> channel1, channel2, channel3;
00072
00073 Copy(image, channel1, channel2, channel3);
00074
00075
00076 setPropertyValue< QVImage<uChar,1> >("Channel 1 image", channel1);
00077 setPropertyValue< QVImage<uChar,1> >("Channel 2 image", channel2);
00078 setPropertyValue< QVImage<uChar,1> >("Channel 3 image", channel3);
00079 }
00080 };
00081
00082 class QVMergeC3ImageUChar: public QVProcessingBlock
00083 {
00084 public:
00085 QVMergeC3ImageUChar(QString name = QString()): QVProcessingBlock(name)
00086 {
00087
00088 addProperty< QVImage<uChar,1> >("Channel 1 input image", inputFlag|outputFlag);
00089 addProperty< QVImage<uChar,1> >("Channel 2 input image", inputFlag|outputFlag);
00090 addProperty< QVImage<uChar,1> >("Channel 3 input image", inputFlag|outputFlag);
00091
00092
00093 addProperty< QVImage<uChar,3> >("Output image", outputFlag);
00094 }
00095
00096 void iterate()
00097 {
00098
00099 const QVImage<uChar,1> channel1 = getPropertyValue< QVImage<uChar,1> >("Channel 1 input image"),
00100 channel2 = getPropertyValue< QVImage<uChar,1> >("Channel 2 input image"),
00101 channel3 = getPropertyValue< QVImage<uChar,1> >("Channel 3 input image");
00102
00103 QVImage<uChar,3> imageC3;
00104
00105 Copy(channel1, channel2, channel3, imageC3);
00106
00107
00108 setPropertyValue< QVImage<uChar,3> >("Output image", imageC3);
00109 }
00110 };
00111
00112
00113 class QVMyFilterHipass: public QVProcessingBlock
00114 {
00115 public:
00116 QVMyFilterHipass(QString name = QString()): QVProcessingBlock(name)
00117 {
00118 addProperty< QVImage<uChar,3> >("Input image", inputFlag|outputFlag);
00119 addProperty< QVImage<uChar,3> >("Output image", outputFlag);
00120 addProperty< IppiMaskSize >("mask", inputFlag, ippMskSize5x5);
00121 addProperty< QPoint >("destROIOffset", inputFlag);
00122 }
00123
00124 void iterate()
00125 {
00126
00127 const QVImage<uChar, 3> qvimage_pSrc = getPropertyValue< QVImage<uChar, 3> > ("Input image");
00128 const IppiMaskSize mask = getPropertyValue< IppiMaskSize > ("mask");
00129 const QPoint destROIOffset = getPropertyValue< QPoint > ("destROIOffset");
00130
00131 QVImage<uChar, 3> qvimage_pDst;
00132
00133 FilterHipass(qvimage_pSrc, qvimage_pDst, mask, destROIOffset);
00134 setPropertyValue< QVImage<uChar, 3> >("Output image", qvimage_pDst);
00135 }
00136 };
00137
00138 class QVSFloatC1MaximalPoints: public QVProcessingBlock
00139 {
00140 public:
00141 QVSFloatC1MaximalPoints(QString name = QString()): QVProcessingBlock(name)
00142 {
00143
00144 addProperty< QVImage<sFloat> >("Input image", inputFlag|outputFlag);
00145 addProperty< double >("Threshold", inputFlag);
00146 addProperty< int >("Radius", inputFlag);
00147
00148
00149 addProperty< QList<QPointF> >("max", outputFlag);
00150 }
00151
00152 void iterate()
00153 {
00154
00155 const QVImage<sFloat> image = getPropertyValue< QVImage<sFloat> >("Input image");
00156 const double threshold = getPropertyValue< double >("Threshold");
00157 const int radius = getPropertyValue< int >("Radius");
00158
00159 QMap<sFloat, QPointF> map = maximalPoints(image, threshold, radius);
00160
00161
00162 setPropertyValue< QList<QPointF> >("max", map.values());
00163 }
00164 };
00165
00166 int main(int argc, char *argv[])
00167 {
00168 QVApplication app(argc, argv, "Example application for QVision.", true );
00169
00170
00171
00172 QVDesignerGUI::registerUserType<QVSplitC3ImageUChar>("QVSplitC3ImageUChar");
00173 QVDesignerGUI::registerUserType<QVMergeC3ImageUChar>("QVMergeC3ImageUChar");
00174 QVDesignerGUI::registerUserType<QVMyFilterHipass>("QVMyFilterHipass");
00175 QVDesignerGUI::registerUserType<QVSFloatC1MaximalPoints>("QVSFloatC1MaximalPoints");
00176
00177 QVSplitC3ImageUChar splitter("Splitter");
00178 QVMergeC3ImageUChar merger("Merger");
00179 QVMyFilterHipass hipass("Hipass");
00180 QVSFloatC1MaximalPoints max("Maximal");
00181
00182
00183
00184 QVDesignerGUI interface;
00185
00186
00187
00188
00189
00190
00191
00192
00193 return app.exec();
00194 }
00195
00196 #endif