00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00024
00025 #ifndef QVIPP_H
00026 #define QVIPP_H
00027
00028 #include <qvcore/qvimage.h>
00029 #include <QMap>
00030
00031 namespace qvipp
00032 {
00039 void Copy(const QVImage<uChar, 1> &src, QVImage<uChar, 1> &dest);
00040
00043 void Copy(const QVImage<sShort, 1> &src, QVImage<sShort, 1> &dest);
00044
00047 void Copy(const QVImage<sFloat, 1> &src, QVImage<sFloat, 1> &dest);
00048
00051 void Copy(const QVImage<uChar, 3> &src, QVImage<uChar, 3> &dest);
00052
00055 void Copy(const QVImage<sShort, 3> &src, QVImage<sShort, 3> &dest);
00056
00059 void Copy(const QVImage<sFloat, 3> &src, QVImage<sFloat, 3> &dest);
00060
00068 void Copy(const QVImage<uChar, 1> &src, QVImage<uChar, 3> &dest);
00069
00072 void Copy(const QVImage<sShort, 1> &src, QVImage<sShort, 3> &dest);
00073
00076 void Copy(const QVImage<sFloat, 1> &src, QVImage<sFloat, 3> &dest);
00077
00094 void Compare(const QVImage<uChar> &src1, const QVImage<uChar> &src2, QVImage<uChar> &dest, IppCmpOp ippCmpOp = ippCmpEq);
00095
00098 void Compare(const QVImage<sShort> &src1, const QVImage<sShort> &src2, QVImage<uChar> &dest, IppCmpOp ippCmpOp = ippCmpEq);
00099
00102 void Compare(const QVImage<sFloat> &src1, const QVImage<sFloat> &src2, QVImage<uChar> &dest, IppCmpOp ippCmpOp = ippCmpEq);
00103
00106 void Compare(const QVImage<uChar,3> &src1, const QVImage<uChar,3> &src2, QVImage<uChar> &dest, IppCmpOp ippCmpOp = ippCmpEq);
00107
00110 void Compare(const QVImage<sShort,3> &src1, const QVImage<sShort,3> &src2, QVImage<uChar> &dest, IppCmpOp ippCmpOp = ippCmpEq);
00111
00114 void Compare(const QVImage<sFloat,3> &src1, const QVImage<sFloat,3> &src2, QVImage<uChar> &dest, IppCmpOp ippCmpOp = ippCmpEq);
00115
00134 void CompareC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant, IppCmpOp ippCmpOp = ippCmpEq);
00135
00138 void CompareC(const QVImage<sFloat> &src, QVImage<uChar> &dest, sFloat constant, IppCmpOp ippCmpOp = ippCmpEq);
00139
00147 void Convert(const QVImage<uChar, 1> &src, QVImage<sShort, 1> &dest);
00148
00151 void Convert(const QVImage<uChar, 1> &src, QVImage<sFloat, 1> &dest);
00152
00155 void Convert(const QVImage<sShort, 1> &src, QVImage<uChar, 1> &dest);
00156
00159 void Convert(const QVImage<sShort, 1> &src, QVImage<sFloat, 1> &dest);
00160
00163 void Convert(const QVImage<uChar, 3> &src, QVImage<sShort, 3> &dest);
00164
00167 void Convert(const QVImage<uChar, 3> &src, QVImage<sFloat, 3> &dest);
00168
00171 void Convert(const QVImage<sShort, 3> &src, QVImage<uChar, 3> &dest);
00172
00175 void Convert(const QVImage<sShort, 3> &src, QVImage<sFloat, 3> &dest);
00176
00189 void Convert(const QVImage<sFloat, 1> &src, QVImage<uChar, 1> &dest, IppRoundMode roundMode = ippRndNear);
00190
00193 void Convert(const QVImage<sFloat, 1> &src, QVImage<sShort, 1> &dest, IppRoundMode roundMode = ippRndNear);
00194
00197 void Convert(const QVImage<sFloat, 3> &src, QVImage<uChar, 3> &dest, IppRoundMode roundMode = ippRndNear);
00198
00201 void Convert(const QVImage<sFloat, 3> &src, QVImage<sShort, 3> &dest, IppRoundMode roundMode = ippRndNear);
00202
00213 void RGBToGray(const QVImage<uChar, 3> &src, QVImage<uChar, 1> &dest);
00214
00217 void RGBToGray(const QVImage<sShort, 3> &src, QVImage<sShort, 1> &dest);
00218
00221 void RGBToGray(const QVImage<sFloat, 3> &src, QVImage<sFloat, 1> &dest);
00222
00240 void Threshold(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant, IppCmpOp ippCmpOp = ippCmpEq);
00241
00244 void Threshold(const QVImage<sShort> &src, QVImage<sShort> &dest, sShort constant, IppCmpOp ippCmpOp = ippCmpEq);
00245
00248 void Threshold(const QVImage<sFloat> &src, QVImage<sFloat> &dest, sFloat constant, IppCmpOp ippCmpOp = ippCmpEq);
00249
00256 void Set(QVImage<uChar> &img, uChar constant);
00257
00260 void Set(QVImage<sShort> &img, sShort constant);
00261
00264 void Set(QVImage<sFloat> &img, sFloat constant);
00265
00275 void Set(QVImage<uChar, 3> &img, uChar red, uChar green, uChar blue);
00276
00279 void Set(QVImage<sShort, 3> &img, sShort red, sShort green, sShort blue);
00280
00283 void Set(QVImage<sFloat, 3> &img, sFloat red, sFloat green, sFloat blue);
00284
00289 void Abs(const QVImage<sShort> &src, QVImage<sShort> &dest);
00290
00293 void Abs(const QVImage<sFloat> &src, QVImage<sFloat> &dest);
00294
00295
00300 void Not(const QVImage<uChar> &src, QVImage<uChar> &dest);
00301
00304 void Not(const QVImage<uChar,3> &src, QVImage<uChar,3> &dest);
00305
00311 void OrC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant);
00312
00318 void AndC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant);
00319
00325 void XorC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant);
00326
00332 void LShiftC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant);
00333
00334
00336
00337
00343 void RShiftC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant);
00344
00345
00350
00351
00352
00353
00355
00356
00357
00372 void Add(const QVImage<uChar> &src1, const QVImage<uChar> &src2, QVImage<uChar> &dest, int scale = 1);
00373
00376 void Add(const QVImage<uChar,3> &src1, const QVImage<uChar,3> &src2, QVImage<uChar,3> &dest, int scale = 1);
00377
00380 void Add(const QVImage<sShort> &src1, const QVImage<sShort> &src2, QVImage<sShort> &dest, int scale = 1);
00381
00384 void Add(const QVImage<sShort,3> &src1, const QVImage<sShort,3> &src2, QVImage<sShort,3> &dest, int scale = 1);
00385
00388 void Add(const QVImage<sFloat> &src1, const QVImage<sFloat> &src2, QVImage<sFloat> &dest);
00389
00392 void Add(const QVImage<sFloat,3> &src1, const QVImage<sFloat,3> &src2, QVImage<sFloat,3> &dest);
00393
00408 void Sub(const QVImage<uChar> &src1, const QVImage<uChar> &src2,QVImage<uChar> &dest, int scale = 1);
00409
00412 void Sub(const QVImage<uChar,3> &src1, const QVImage<uChar,3> &src2,QVImage<uChar,3> &dest, int scale = 1);
00413
00416 void Sub(const QVImage<sShort> &src1, const QVImage<sShort> &src2,QVImage<sShort> &dest, int scale = 1);
00417
00420 void Sub(const QVImage<sShort,3> &src1, const QVImage<sShort,3> &src2,QVImage<sShort,3> &dest, int scale = 1);
00421
00424 void Sub(const QVImage<sFloat> &src1, const QVImage<sFloat> &src2,QVImage<sFloat> &dest);
00425
00428 void Sub(const QVImage<sFloat,3> &src1, const QVImage<sFloat,3> &src2,QVImage<sFloat,3> &dest);
00429
00444 void Mul(const QVImage<uChar> &src1, const QVImage<uChar> &src2,QVImage<uChar> &dest, int scale = 1);
00445
00448 void Mul(const QVImage<uChar,3> &src1, const QVImage<uChar,3> &src2,QVImage<uChar,3> &dest, int scale = 1);
00449
00452 void Mul(const QVImage<sShort> &src1, const QVImage<sShort> &src2,QVImage<sShort> &dest, int scale = 1);
00453
00456 void Mul(const QVImage<sShort,3> &src1, const QVImage<sShort,3> &src2,QVImage<sShort,3> &dest, int scale = 1);
00457
00460 void Mul(const QVImage<sFloat> &src1, const QVImage<sFloat> &src2,QVImage<sFloat> &dest);
00461
00464 void Mul(const QVImage<sFloat,3> &src1, const QVImage<sFloat,3> &src2,QVImage<sFloat,3> &dest);
00465
00480 void Div(const QVImage<uChar> &src1, const QVImage<uChar> &src2,QVImage<uChar> &dest, int scale = 1);
00481
00484 void Div(const QVImage<uChar,3> &src1, const QVImage<uChar,3> &src2,QVImage<uChar,3> &dest, int scale = 1);
00485
00488 void Div(const QVImage<sShort> &src1, const QVImage<sShort> &src2,QVImage<sShort> &dest, int scale = 1);
00489
00492 void Div(const QVImage<sShort,3> &src1, const QVImage<sShort,3> &src2,QVImage<sShort,3> &dest, int scale = 1);
00493
00496 void Div(const QVImage<sFloat> &src1, const QVImage<sFloat> &src2,QVImage<sFloat> &dest);
00497
00500 void Div(const QVImage<sFloat,3> &src1, const QVImage<sFloat,3> &src2,QVImage<sFloat,3> &dest);
00501
00513 void MulScale(const QVImage<uChar> &src1, const QVImage<uChar> &src2, QVImage<uChar> &dest);
00514
00517 void MulScale(const QVImage<uChar,3> &src1, const QVImage<uChar,3> &src2, QVImage<uChar,3> &dest);
00518
00527 void AbsDiff(const QVImage<uChar> &src1, const QVImage<uChar> &src2,QVImage<uChar> &dest);
00528
00531 void AbsDiff(const QVImage<sFloat> &src1, const QVImage<sFloat> &src2,QVImage<sFloat> &dest);
00532
00533
00548 void MulC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant, int scale = 1);
00549
00552 void MulC(const QVImage<sShort> &src, QVImage<sShort> &dest, sShort constant, int scale = 1);
00553
00556 void MulC(const QVImage<sFloat> &src, QVImage<sFloat> &dest, sFloat constant);
00557
00572 void AddC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant, int scale = 1);
00573
00576 void AddC(const QVImage<sShort> &src, QVImage<sShort> &dest, sShort constant, int scale = 1);
00577
00580 void AddC(const QVImage<sFloat> &src, QVImage<sFloat> &dest, sFloat constant);
00581
00597 void SubC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant, int scale = 1);
00598
00601 void SubC(const QVImage<sShort> &src, QVImage<sShort> &dest, sShort constant, int scale = 1);
00602
00605 void SubC(const QVImage<sFloat> &src, QVImage<sFloat> &dest, sFloat constant);
00606
00622 void DivC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant, int scale = 1);
00623
00626 void DivC(const QVImage<sShort> &src, QVImage<sShort> &dest, sShort constant, int scale = 1);
00627
00630 void DivC(const QVImage<sFloat> &src, QVImage<sFloat> &dest, sFloat constant);
00631
00632
00637 void Sum(const QVImage<uChar> &src, sDouble & value);
00638
00641 void Sum(const QVImage<sShort> &src, sDouble & value);
00642
00649 void Sum(const QVImage<uChar,3> &src, sDouble & r, sDouble & g, sDouble & b);
00650
00653 void Sum(const QVImage<sShort,3> &src, sDouble & r, sDouble & g, sDouble & b);
00654
00659 void Mean(const QVImage<uChar> &src, sDouble & value);
00660
00663 void Mean(const QVImage<sShort> &src, sDouble & value);
00664
00671 void Mean(const QVImage<uChar,3> &src, sDouble & r, sDouble & g, sDouble & b);
00672
00675 void Mean(const QVImage<sShort,3> &src, sDouble & r, sDouble & g, sDouble & b);
00676
00681 void Max(const QVImage<uChar> &src, uChar & value);
00682
00685 void Max(const QVImage<sShort> &src, sShort & value);
00686
00689 void Max(const QVImage<sFloat> &src, sFloat & value);
00690
00697 void Max(const QVImage<uChar,3> &src, uChar & r, uChar & g, uChar & b);
00698
00701 void Max(const QVImage<sShort,3> &src, sShort &r, sShort &g, sShort &b);
00702
00707 void Min(const QVImage<uChar> &src, uChar & value);
00708
00711 void Min(const QVImage<sShort> &src, sShort & value);
00712
00715 void Min(const QVImage<sFloat> &src, sFloat & value);
00716
00723 void Min(const QVImage<uChar,3> &src, uChar & r, uChar & g, uChar & b);
00724
00727 void Min(const QVImage<sShort,3> &src, sShort &r, sShort &g, sShort &b);
00728
00729
00741 void FilterMax(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt colMaskSize, uInt rowMaskSize);
00742
00745 void FilterMax(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt colMaskSize, uInt rowMaskSize);
00746
00758 void FilterMin(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt colMaskSize, uInt rowMaskSize);
00759
00762 void FilterMin(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt colMaskSize, uInt rowMaskSize);
00763
00775 void FilterBox(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt colMaskRadius, uInt rowMaskRadius);
00776
00779 void FilterBox(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt colMaskRadius, uInt rowMaskRadius);
00780
00802 void FilterGauss(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt maskSize);
00803
00806 void FilterGauss(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt maskSize);
00807
00824 void FilterHipass(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt maskSize = 3);
00825
00828 void FilterHipass(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt maskSize = 3);
00829
00838 void FilterLowpass(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt maskSize = 3);
00839
00842 void FilterLowpass(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt maskSize = 3);
00843
00855 void FilterSharpen(const QVImage<uChar> &src, QVImage<uChar> &dest);
00856
00859 void FilterSharpen(const QVImage<sFloat> &src, QVImage<sFloat> &dest);
00860
00871 void FilterSobelHoriz(const QVImage<uChar> &src, QVImage<uChar> &dest);
00872
00875 void FilterSobelHoriz(const QVImage<sShort> &src, QVImage<sShort> &dest);
00876
00879 void FilterSobelHoriz(const QVImage<sFloat> &src, QVImage<sFloat> &dest);
00880
00891 void FilterSobelVert(const QVImage<uChar> &src, QVImage<uChar> &dest);
00892
00895 void FilterSobelVert(const QVImage<sShort> &src, QVImage<sShort> &dest);
00896
00899 void FilterSobelVert(const QVImage<sFloat> &src, QVImage<sFloat> &dest);
00900
00920 void FilterSobelHorizMask(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt maskSize = 3);
00921
00939 void FilterSobelVertMask(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt maskSize = 3);
00940
00954 void FilterSobelHorizBorder(const QVImage<uChar> &src, QVImage<sShort> &dest, QVImage<uChar> &buffer, uInt maskSize = 3);
00955
00969 void FilterSobelNegVertBorder(const QVImage<uChar> &src, QVImage<sShort> &dest, QVImage<uChar> &buffer, uInt maskSize = 3);
00970
00982 void FilterMedian(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt colMaskRadius = 3, uInt rowMaskRadius = 3);
00983
00986 void FilterMedian(const QVImage<sShort> &src, QVImage<sShort> &dest, uInt colMaskRadius = 3, uInt rowMaskRadius = 3);
00987
01003 void Resize(const QVImage<uChar> &src, QVImage<uChar> &dest, int interpolation = IPPI_INTER_LINEAR);
01004
01007 void Resize(const QVImage<sFloat> &src, QVImage<sFloat> &dest, int interpolation = IPPI_INTER_LINEAR);
01008
01017 void CannyGetSize(const QVGenericImage &src, QVImage<uChar> &buffer);
01018
01028 void FilterSobelHorizGetBufferSize(const QVGenericImage &src, QVImage<uChar> &buffer, uInt maskSize = 3);
01029
01039 void FilterSobelNegVertGetBufferSize(const QVGenericImage &src, QVImage<uChar> &buffer, uInt maskSize = 3);
01040
01051 void MinEigenValGetBufferSize( const QVGenericImage &src, QVImage<uChar> &buffer, uInt apertureSize = 5, uInt avgWindow = 5);
01052
01061 void FloodFillGetSize(const QVGenericImage &src, QVImage<uChar> &buffer);
01062
01100 void Canny(QVImage<sShort> &dX, QVImage<sShort> &dY, QVImage<uChar> &dest,
01101 QVImage<uChar> &buffer, double low = 50.0, double high = 150.0);
01102
01105 void Canny(QVImage<sFloat> &dX, QVImage<sFloat> &dY, QVImage<uChar> &dest,
01106 QVImage<uChar> &buffer, double low = 50.0, double high = 150.0);
01107
01130 void MinEigenVal(const QVImage<uChar> &src, QVImage<sFloat> &dest, QVImage<uChar> &buffer,
01131 uInt apertureSize = 3, uInt avgWindow = 5, IppiKernelType kernel = ippKernelSobel);
01132
01141 void FastMarchingGetBufferSize(const QVGenericImage &image, QVImage<uChar> &buffer);
01142
01156 void FastMarching(const QVImage<uChar> &mask, QVImage<sFloat> &distances, int radius, QVImage<uChar> &buffer);
01157
01200 void Inpaint(const QVImage<uChar> &src, const QVImage<uChar> &mask, const QVImage<sFloat> &distances,
01201 QVImage<uChar> &dest, int radius = 4, IppiInpaintFlag flag = IPP_INPAINT_TELEA);
01202
01205 void Inpaint(const QVImage<uChar,3> &src, const QVImage<uChar> &mask, const QVImage<sFloat> &distances,
01206 QVImage<uChar,3> &dest, int radius = 4, IppiInpaintFlag flag = IPP_INPAINT_TELEA);
01207
01218 QMap<sInt, int> HistogramRange(const QVImage<uChar, 1> &src, QList<uChar> values = QList<uChar>());
01219
01240 void FloodFillRange(QVImage<uChar> &img, QVImage<uChar> &buffer,
01241 uInt seedX, uInt seedY, uChar newVal, uChar minDelta, uChar maxDelta);
01242
01243 }
01244
01245 #endif