00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00024
00038 #include <iostream>
00039 #include <QVImage>
00040 #include <QDir>
00041 #include <qvimageio.h>
00042
00043 void doTests(const QVImage<uChar, 3> &image)
00044 {
00045
00046
00047 const QVImage<uChar, 3> imageCopy = image;
00048 QVImage<uChar, 3> imageCopy2;
00049 imageCopy2 = image;
00050
00051 Q_ASSERT_X(image == imageCopy, "test QImage convert", "QVImage copy 1");
00052 Q_ASSERT_X(image == imageCopy2, "test QImage convert", "QVImage copy 2");
00053
00054 if (image.getCols() > 50 and image.getRows() > 50)
00055 {
00056 imageCopy2.setROI(QRect(QPoint(10,10), QPoint(50, 50)));
00057 imageCopy2.setAnchor(QPoint(4,4));
00058
00059 const QVImage<uChar, 3> imageCopy3 = imageCopy2;
00060 QVImage<uChar, 3> imageCopy4;
00061 imageCopy4 = imageCopy2;
00062
00063 Q_ASSERT_X(image != imageCopy3, "test QImage convert", "QVImage copy 3");
00064 Q_ASSERT_X(image != imageCopy4, "test QImage convert", "QVImage copy 4");
00065 Q_ASSERT_X(imageCopy3.getROI() == QRect(QPoint(10,10), QPoint(50, 50)), "test QImage convert", "QVImage copy 5");
00066 Q_ASSERT_X(imageCopy4.getROI() == QRect(QPoint(10,10), QPoint(50, 50)), "test QImage convert", "QVImage copy 6");
00067 Q_ASSERT_X(imageCopy3.getAnchor() == QPoint(4,4), "test QImage convert", "QVImage copy 7");
00068 Q_ASSERT_X(imageCopy4.getAnchor() == QPoint(4,4), "test QImage convert", "QVImage copy 8");
00069 }
00070
00071
00072
00073 const QImage qImage = image;
00074 QImage qImage2;
00075 qImage2 = image;
00076
00077 const QVImage<uChar, 3> fromQImage = qImage,
00078 fromQImage2 = qImage2;
00079
00080 Q_ASSERT_X(image == fromQImage, "test QImage convert", "QImage convert 1");
00081 Q_ASSERT_X(image == fromQImage2, "test QImage convert", "QImage convert 2");
00082
00083
00084
00085 IplImage *iplImage = image;
00086 const QVImage<uChar, 3> fromIplImage = iplImage;
00087 cvReleaseImage(&iplImage);
00088
00089 Q_ASSERT_X(image == fromIplImage, "test QImage convert", "IplImage convert");
00090
00091
00092
00093 const QVImage<uChar> channelR = image(0),
00094 channelG = image(1),
00095 channelB = image(2);
00096
00097 const QVImage<uChar, 3> imageRGB(channelR, channelG, channelB);
00098 Q_ASSERT_X(image == imageRGB, "test QImage channel selection", "Image channel splitting test 1");
00099
00100 const QVImage<uChar, 3> imageBRG(image(2), image(0), image(1));
00101 const QVImage<uChar, 3> imageRGB2(imageBRG(1), imageBRG(2), imageBRG(0));
00102 Q_ASSERT_X(image == imageRGB2, "test QImage channel selection", "Image channel splitting test 2");
00103
00104
00105
00106 QVImage<uChar> imageBW = image;
00107 const QVImage<uChar,3> imageBWRGB = imageBW;
00108
00109 Q_ASSERT_X(imageBWRGB(0) == imageBWRGB(1), "test QImage conversion to BW", "First channel of BW image is not equal to second.");
00110 Q_ASSERT_X(imageBWRGB(1) == imageBWRGB(2), "test QImage conversion to BW", "Second channel of BW image is not equal to third.");
00111
00112 imageBW = imageBWRGB;
00113
00114
00115
00116
00117
00118 const QVImage<sFloat,3> sFloatImage = image;
00119 const QVImage<uChar,3> sFloatImageOrig = sFloatImage;
00120 Q_ASSERT_X(image == sFloatImage, "test type conversion", "Conversion with type sFloat failed.");
00121
00122 const QVImage<sChar,3> sCharImage = image;
00123 const QVImage<uChar,3> sCharImageOrig = sCharImage;
00124 Q_ASSERT_X(image == sCharImage, "test type conversion", "Conversion with type sChar failed.");
00125
00126 const QVImage<sInt,3> sIntImage = image;
00127 const QVImage<uChar,3> sIntImageOrig = sIntImage;
00128 Q_ASSERT_X(image == sIntImage, "test type conversion", "Conversion with type sInt failed.");
00129
00130 const QVImage<uInt,3> uIntImage = image;
00131 const QVImage<uChar,3> uIntImageOrig = uIntImage;
00132 Q_ASSERT_X(image == uIntImage, "test type conversion", "Conversion with type uInt failed.");
00133
00134 const QVImage<sShort,3> sShortImage = image;
00135 const QVImage<uChar,3> sShortImageOrig = sShortImage;
00136 Q_ASSERT_X(image == sShortImage, "test type conversion", "Conversion with type sShort failed.");
00137
00138 const QVImage<uShort,3> uShortImage = image;
00139 const QVImage<uChar,3> uShortImageOrig = uShortImage;
00140 Q_ASSERT_X(image == uShortImage, "test type conversion", "Conversion with type uShort failed.");
00141
00142
00143
00144 QVImage<uChar, 3> imageBis(image.getCols(), image.getRows());
00145 for(uInt i = 0; i < image.getRows(); i++)
00146 for(uInt j = 0; j < image.getCols(); j++)
00147 {
00148 imageBis(j,i,0) = image(j,i,0);
00149 imageBis(j,i,1) = image(j,i,1);
00150 imageBis(j,i,2) = image(j,i,2);
00151 }
00152
00153 imageBis.setROI(image.getROI());
00154 Q_ASSERT_X(image == imageBis, "test pixel access", "First pixel access test failed.");
00155 }
00156
00157 int main(int argc, char *argv[])
00158 {
00159
00160 if (argc < 2)
00161 {
00162 std::cout << "Usage: " << argv[0] << " <path to input images>" << std::endl;
00163 return -1;
00164 }
00165
00166 int num_images = 0;
00167 const QDir imagesDir(argv[1]);
00168 const QStringList files = imagesDir.entryList(QDir::Files|QDir::Readable);
00169 foreach (QString file, files)
00170 {
00171
00172 QVImage<uChar, 3> image;
00173 readQVImageFromFile(QString(argv[1]) + "/" + file, image);
00174
00175
00176 if (image.getCols() != 1 and image.getRows() != 1)
00177 {
00178
00179 std::cout << "Testing image " << (num_images++) << " '" << qPrintable(file) << "'. Size (" << image.getCols() << ", " << image.getRows() << ")" << std::endl;
00180 doTests(image);
00181 }
00182 }
00183 return 0;
00184 }
00185