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
00038 void Copy(const QVImage<uChar, 1> &src, QVImage<uChar, 1> &dest);
00039
00043 void Copy(const QVImage<sShort, 1> &src, QVImage<sShort, 1> &dest);
00044
00048 void Copy(const QVImage<sFloat, 1> &src, QVImage<sFloat, 1> &dest);
00049
00053 void Copy(const QVImage<uChar, 3> &src, QVImage<uChar, 3> &dest);
00054
00058 void Copy(const QVImage<sShort, 3> &src, QVImage<sShort, 3> &dest);
00059
00063 void Copy(const QVImage<sFloat, 3> &src, QVImage<sFloat, 3> &dest);
00064
00073 void Copy(const QVImage<uChar, 1> &src, QVImage<uChar, 3> &dest);
00074
00078 void Copy(const QVImage<sShort, 1> &src, QVImage<sShort, 3> &dest);
00079
00083 void Copy(const QVImage<sFloat, 1> &src, QVImage<sFloat, 3> &dest);
00084
00095 void Copy(const QVImage<uChar, 1> &src1, const QVImage<uChar, 1> &src2, const QVImage<uChar, 1> &src3, QVImage<uChar, 3> &dest);
00096
00100 void Copy(const QVImage<sShort, 1> &src1, const QVImage<sShort, 1> &src2, const QVImage<sShort, 1> &src3, QVImage<sShort, 3> &dest);
00101
00105 void Copy(const QVImage<sFloat, 1> &src1, const QVImage<sFloat, 1> &src2, const QVImage<sFloat, 1> &src3, QVImage<sFloat, 3> &dest);
00106
00116 void Copy(const QVImage<uChar, 3> &src, QVImage<uChar, 1> &dest, uChar channel);
00117
00121 void Copy(const QVImage<sShort, 3> &src, QVImage<sShort, 1> &dest, uChar channel);
00122
00126 void Copy(const QVImage<sFloat, 3> &src, QVImage<sFloat, 1> &dest, uChar channel);
00127
00145 void Compare(const QVImage<uChar> &src1, const QVImage<uChar> &src2, QVImage<uChar> &dest, IppCmpOp ippCmpOp = ippCmpEq);
00146
00150 void Compare(const QVImage<sShort> &src1, const QVImage<sShort> &src2, QVImage<uChar> &dest, IppCmpOp ippCmpOp = ippCmpEq);
00151
00155 void Compare(const QVImage<sFloat> &src1, const QVImage<sFloat> &src2, QVImage<uChar> &dest, IppCmpOp ippCmpOp = ippCmpEq);
00156
00160 void Compare(const QVImage<uChar,3> &src1, const QVImage<uChar,3> &src2, QVImage<uChar> &dest, IppCmpOp ippCmpOp = ippCmpEq);
00161
00165 void Compare(const QVImage<sShort,3> &src1, const QVImage<sShort,3> &src2, QVImage<uChar> &dest, IppCmpOp ippCmpOp = ippCmpEq);
00166
00170 void Compare(const QVImage<sFloat,3> &src1, const QVImage<sFloat,3> &src2, QVImage<uChar> &dest, IppCmpOp ippCmpOp = ippCmpEq);
00171
00191 void CompareC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant, IppCmpOp ippCmpOp = ippCmpEq);
00192
00196 void CompareC(const QVImage<sFloat> &src, QVImage<uChar> &dest, sFloat constant, IppCmpOp ippCmpOp = ippCmpEq);
00197
00206 void Convert(const QVImage<uChar, 1> &src, QVImage<sShort, 1> &dest);
00207
00211 void Convert(const QVImage<uChar, 1> &src, QVImage<sFloat, 1> &dest);
00212
00216 void Convert(const QVImage<sShort, 1> &src, QVImage<uChar, 1> &dest);
00217
00221 void Convert(const QVImage<sShort, 1> &src, QVImage<sFloat, 1> &dest);
00222
00226 void Convert(const QVImage<uChar, 3> &src, QVImage<sShort, 3> &dest);
00227
00231 void Convert(const QVImage<uChar, 3> &src, QVImage<sFloat, 3> &dest);
00232
00236 void Convert(const QVImage<sShort, 3> &src, QVImage<uChar, 3> &dest);
00237
00241 void Convert(const QVImage<sShort, 3> &src, QVImage<sFloat, 3> &dest);
00242
00256 void Convert(const QVImage<sFloat, 1> &src, QVImage<uChar, 1> &dest, IppRoundMode roundMode = ippRndNear);
00257
00261 void Convert(const QVImage<sFloat, 1> &src, QVImage<sShort, 1> &dest, IppRoundMode roundMode = ippRndNear);
00262
00266 void Convert(const QVImage<sFloat, 3> &src, QVImage<uChar, 3> &dest, IppRoundMode roundMode = ippRndNear);
00267
00271 void Convert(const QVImage<sFloat, 3> &src, QVImage<sShort, 3> &dest, IppRoundMode roundMode = ippRndNear);
00272
00284 void RGBToGray(const QVImage<uChar, 3> &src, QVImage<uChar, 1> &dest);
00285
00289 void RGBToGray(const QVImage<sShort, 3> &src, QVImage<sShort, 1> &dest);
00290
00294 void RGBToGray(const QVImage<sFloat, 3> &src, QVImage<sFloat, 1> &dest);
00295
00314 void Threshold(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant, IppCmpOp ippCmpOp = ippCmpEq);
00315
00319 void Threshold(const QVImage<sShort> &src, QVImage<sShort> &dest, sShort constant, IppCmpOp ippCmpOp = ippCmpEq);
00320
00324 void Threshold(const QVImage<sFloat> &src, QVImage<sFloat> &dest, sFloat constant, IppCmpOp ippCmpOp = ippCmpEq);
00325
00333 void Set(QVImage<uChar> &img, uChar constant);
00334
00338 void Set(QVImage<sShort> &img, sShort constant);
00339
00343 void Set(QVImage<sFloat> &img, sFloat constant);
00344
00355 void Set(QVImage<uChar, 3> &img, uChar red, uChar green, uChar blue);
00356
00360 void Set(QVImage<sShort, 3> &img, sShort red, sShort green, sShort blue);
00361
00365 void Set(QVImage<sFloat, 3> &img, sFloat red, sFloat green, sFloat blue);
00366
00372 void Abs(const QVImage<sShort> &src, QVImage<sShort> &dest);
00373
00377 void Abs(const QVImage<sFloat> &src, QVImage<sFloat> &dest);
00378
00379
00385 void Not(const QVImage<uChar> &src, QVImage<uChar> &dest);
00386
00390 void Not(const QVImage<uChar,3> &src, QVImage<uChar,3> &dest);
00391
00398 void OrC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant);
00399
00406 void AndC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant);
00407
00414 void XorC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant);
00415
00422 void LShiftC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant);
00423
00424
00427
00428
00435 void RShiftC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant);
00436
00437
00443
00444
00445
00446
00449
00450
00451
00467 void Add(const QVImage<uChar> &src1, const QVImage<uChar> &src2, QVImage<uChar> &dest, int scale = 1);
00468
00472 void Add(const QVImage<uChar,3> &src1, const QVImage<uChar,3> &src2, QVImage<uChar,3> &dest, int scale = 1);
00473
00477 void Add(const QVImage<sShort> &src1, const QVImage<sShort> &src2, QVImage<sShort> &dest, int scale = 1);
00478
00482 void Add(const QVImage<sShort,3> &src1, const QVImage<sShort,3> &src2, QVImage<sShort,3> &dest, int scale = 1);
00483
00487 void Add(const QVImage<sFloat> &src1, const QVImage<sFloat> &src2, QVImage<sFloat> &dest);
00488
00492 void Add(const QVImage<sFloat,3> &src1, const QVImage<sFloat,3> &src2, QVImage<sFloat,3> &dest);
00493
00509 void Sub(const QVImage<uChar> &src1, const QVImage<uChar> &src2,QVImage<uChar> &dest, int scale = 1);
00510
00514 void Sub(const QVImage<uChar,3> &src1, const QVImage<uChar,3> &src2,QVImage<uChar,3> &dest, int scale = 1);
00515
00519 void Sub(const QVImage<sShort> &src1, const QVImage<sShort> &src2,QVImage<sShort> &dest, int scale = 1);
00520
00524 void Sub(const QVImage<sShort,3> &src1, const QVImage<sShort,3> &src2,QVImage<sShort,3> &dest, int scale = 1);
00525
00529 void Sub(const QVImage<sFloat> &src1, const QVImage<sFloat> &src2,QVImage<sFloat> &dest);
00530
00534 void Sub(const QVImage<sFloat,3> &src1, const QVImage<sFloat,3> &src2,QVImage<sFloat,3> &dest);
00535
00551 void Mul(const QVImage<uChar> &src1, const QVImage<uChar> &src2,QVImage<uChar> &dest, int scale = 1);
00552
00556 void Mul(const QVImage<uChar,3> &src1, const QVImage<uChar,3> &src2,QVImage<uChar,3> &dest, int scale = 1);
00557
00561 void Mul(const QVImage<sShort> &src1, const QVImage<sShort> &src2,QVImage<sShort> &dest, int scale = 1);
00562
00566 void Mul(const QVImage<sShort,3> &src1, const QVImage<sShort,3> &src2,QVImage<sShort,3> &dest, int scale = 1);
00567
00571 void Mul(const QVImage<sFloat> &src1, const QVImage<sFloat> &src2,QVImage<sFloat> &dest);
00572
00576 void Mul(const QVImage<sFloat,3> &src1, const QVImage<sFloat,3> &src2,QVImage<sFloat,3> &dest);
00577
00593 void Div(const QVImage<uChar> &src1, const QVImage<uChar> &src2,QVImage<uChar> &dest, int scale = 1);
00594
00598 void Div(const QVImage<uChar,3> &src1, const QVImage<uChar,3> &src2,QVImage<uChar,3> &dest, int scale = 1);
00599
00603 void Div(const QVImage<sShort> &src1, const QVImage<sShort> &src2,QVImage<sShort> &dest, int scale = 1);
00604
00608 void Div(const QVImage<sShort,3> &src1, const QVImage<sShort,3> &src2,QVImage<sShort,3> &dest, int scale = 1);
00609
00613 void Div(const QVImage<sFloat> &src1, const QVImage<sFloat> &src2,QVImage<sFloat> &dest);
00614
00618 void Div(const QVImage<sFloat,3> &src1, const QVImage<sFloat,3> &src2,QVImage<sFloat,3> &dest);
00619
00632 void MulScale(const QVImage<uChar> &src1, const QVImage<uChar> &src2, QVImage<uChar> &dest);
00633
00637 void MulScale(const QVImage<uChar,3> &src1, const QVImage<uChar,3> &src2, QVImage<uChar,3> &dest);
00638
00648 void AbsDiff(const QVImage<uChar> &src1, const QVImage<uChar> &src2,QVImage<uChar> &dest);
00649
00653 void AbsDiff(const QVImage<sFloat> &src1, const QVImage<sFloat> &src2,QVImage<sFloat> &dest);
00654
00655
00671 void MulC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant, int scale = 1);
00672
00676 void MulC(const QVImage<sShort> &src, QVImage<sShort> &dest, sShort constant, int scale = 1);
00677
00681 void MulC(const QVImage<sFloat> &src, QVImage<sFloat> &dest, sFloat constant);
00682
00698 void AddC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant, int scale = 1);
00699
00703 void AddC(const QVImage<sShort> &src, QVImage<sShort> &dest, sShort constant, int scale = 1);
00704
00708 void AddC(const QVImage<sFloat> &src, QVImage<sFloat> &dest, sFloat constant);
00709
00726 void SubC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant, int scale = 1);
00727
00731 void SubC(const QVImage<sShort> &src, QVImage<sShort> &dest, sShort constant, int scale = 1);
00732
00736 void SubC(const QVImage<sFloat> &src, QVImage<sFloat> &dest, sFloat constant);
00737
00754 void DivC(const QVImage<uChar> &src, QVImage<uChar> &dest, uChar constant, int scale = 1);
00755
00759 void DivC(const QVImage<sShort> &src, QVImage<sShort> &dest, sShort constant, int scale = 1);
00760
00764 void DivC(const QVImage<sFloat> &src, QVImage<sFloat> &dest, sFloat constant);
00765
00766
00772 void Sum(const QVImage<uChar> &src, sDouble & value);
00773
00777 void Sum(const QVImage<sShort> &src, sDouble & value);
00778
00786 void Sum(const QVImage<uChar,3> &src, sDouble & r, sDouble & g, sDouble & b);
00787
00791 void Sum(const QVImage<sShort,3> &src, sDouble & r, sDouble & g, sDouble & b);
00792
00798 void Mean(const QVImage<uChar> &src, sDouble & value);
00799
00803 void Mean(const QVImage<sShort> &src, sDouble & value);
00804
00812 void Mean(const QVImage<uChar,3> &src, sDouble & r, sDouble & g, sDouble & b);
00813
00817 void Mean(const QVImage<sShort,3> &src, sDouble & r, sDouble & g, sDouble & b);
00818
00824 void Max(const QVImage<uChar> &src, uChar & value);
00825
00829 void Max(const QVImage<sShort> &src, sShort & value);
00830
00834 void Max(const QVImage<sFloat> &src, sFloat & value);
00835
00843 void Max(const QVImage<uChar,3> &src, uChar & r, uChar & g, uChar & b);
00844
00848 void Max(const QVImage<sShort,3> &src, sShort &r, sShort &g, sShort &b);
00849
00855 void Min(const QVImage<uChar> &src, uChar & value);
00856
00860 void Min(const QVImage<sShort> &src, sShort & value);
00861
00865 void Min(const QVImage<sFloat> &src, sFloat & value);
00866
00874 void Min(const QVImage<uChar,3> &src, uChar & r, uChar & g, uChar & b);
00875
00879 void Min(const QVImage<sShort,3> &src, sShort &r, sShort &g, sShort &b);
00880
00881
00894 void FilterMax(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt colMaskSize, uInt rowMaskSize);
00895
00899 void FilterMax(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt colMaskSize, uInt rowMaskSize);
00900
00913 void FilterMin(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt colMaskSize, uInt rowMaskSize);
00914
00918 void FilterMin(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt colMaskSize, uInt rowMaskSize);
00919
00932 void FilterBox(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt colMaskRadius, uInt rowMaskRadius);
00933
00937 void FilterBox(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt colMaskRadius, uInt rowMaskRadius);
00938
00961 void FilterGauss(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt maskSize = 3);
00962
00966 void FilterGauss(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt maskSize = 3);
00967
00985 void FilterHipass(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt maskSize = 3);
00986
00990 void FilterHipass(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt maskSize = 3);
00991
01001 void FilterLowpass(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt maskSize = 3);
01002
01006 void FilterLowpass(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt maskSize = 3);
01007
01020 void FilterSharpen(const QVImage<uChar> &src, QVImage<uChar> &dest);
01021
01025 void FilterSharpen(const QVImage<sFloat> &src, QVImage<sFloat> &dest);
01026
01038 void FilterSobelHoriz(const QVImage<uChar> &src, QVImage<uChar> &dest);
01039
01043 void FilterSobelHoriz(const QVImage<sShort> &src, QVImage<sShort> &dest);
01044
01048 void FilterSobelHoriz(const QVImage<sFloat> &src, QVImage<sFloat> &dest);
01049
01061 void FilterSobelVert(const QVImage<uChar> &src, QVImage<uChar> &dest);
01062
01066 void FilterSobelVert(const QVImage<sShort> &src, QVImage<sShort> &dest);
01067
01071 void FilterSobelVert(const QVImage<sFloat> &src, QVImage<sFloat> &dest);
01072
01093 void FilterSobelHorizMask(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt maskSize = 3);
01094
01113 void FilterSobelVertMask(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt maskSize = 3);
01114
01129 void FilterSobelHorizBorder(const QVImage<uChar> &src, QVImage<sShort> &dest, QVImage<uChar> &buffer, uInt maskSize = 3);
01130
01145 void FilterSobelNegVertBorder(const QVImage<uChar> &src, QVImage<sShort> &dest, QVImage<uChar> &buffer, uInt maskSize = 3);
01146
01159 void FilterMedian(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt colMaskRadius = 3, uInt rowMaskRadius = 3);
01160
01164 void FilterMedian(const QVImage<sShort> &src, QVImage<sShort> &dest, uInt colMaskRadius = 3, uInt rowMaskRadius = 3);
01165
01174
01179 void Resize(const QVImage<uChar> &src, QVImage<uChar> &dest, int interpolation = IPPI_INTER_LINEAR);
01180
01184 void Resize(const QVImage<sFloat> &src, QVImage<sFloat> &dest, int interpolation = IPPI_INTER_LINEAR);
01185
01195 void CannyGetSize(const QVGenericImage &src, QVImage<uChar> &buffer);
01196
01207 void FilterSobelHorizGetBufferSize(const QVGenericImage &src, QVImage<uChar> &buffer, uInt maskSize = 3);
01208
01219 void FilterSobelNegVertGetBufferSize(const QVGenericImage &src, QVImage<uChar> &buffer, uInt maskSize = 3);
01220
01232 void MinEigenValGetBufferSize( const QVGenericImage &src, QVImage<uChar> &buffer, uInt apertureSize = 5, uInt avgWindow = 5);
01233
01243 void FloodFillGetSize(const QVGenericImage &src, QVImage<uChar> &buffer);
01244
01283 void Canny(QVImage<sShort> &dX, QVImage<sShort> &dY, QVImage<uChar> &dest,
01284 QVImage<uChar> &buffer, double low = 50.0, double high = 150.0);
01285
01289 void Canny(QVImage<sFloat> &dX, QVImage<sFloat> &dY, QVImage<uChar> &dest,
01290 QVImage<uChar> &buffer, double low = 50.0, double high = 150.0);
01291
01315 void MinEigenVal(const QVImage<uChar> &src, QVImage<sFloat> &dest, QVImage<uChar> &buffer,
01316 uInt apertureSize = 3, uInt avgWindow = 5, IppiKernelType kernel = ippKernelSobel);
01317
01327 void FastMarchingGetBufferSize(const QVGenericImage &image, QVImage<uChar> &buffer);
01328
01343 void FastMarching(const QVImage<uChar> &mask, QVImage<sFloat> &distances, int radius, QVImage<uChar> &buffer);
01344
01388 void Inpaint(const QVImage<uChar> &src, const QVImage<uChar> &mask, const QVImage<sFloat> &distances,
01389 QVImage<uChar> &dest, int radius = 4, IppiInpaintFlag flag = IPP_INPAINT_TELEA);
01390
01394 void Inpaint(const QVImage<uChar,3> &src, const QVImage<uChar> &mask, const QVImage<sFloat> &distances,
01395 QVImage<uChar,3> &dest, int radius = 4, IppiInpaintFlag flag = IPP_INPAINT_TELEA);
01396
01409 QMap<sInt, int> HistogramRange(const QVImage<uChar, 1> &src, QList<uChar> values);
01410
01419 QVector<int> HistogramRange(const QVImage<uChar, 1> &src);
01420
01444 void FloodFillRange4Connected(QVImage<uChar> &img, QVImage<uChar> &buffer,
01445 uInt seedX, uInt seedY, uChar newVal, uChar minDelta, uChar maxDelta);
01446
01471 void FloodFillGradient4Connected(QVImage<uChar> &img, QVImage<uChar> &buffer,
01472 uInt seedX, uInt seedY, uChar newVal, uChar minDelta, uChar maxDelta);
01473
01499 void FilterGaussBorder(const QVImage<sFloat, 1> &src, QVImage<sFloat, 1> &dest, QVImage<uChar> &buffer, sInt kernelSize, sFloat sigma, IppiBorderType borderType = ippBorderConst, sFloat borderValue = 0.0);
01500
01512 void FilterGaussGetBufferSize(const QVGenericImage &image, QVImage<uChar> &buffer, uInt kernelSize);
01513
01534 void FindPeaks3x3(const QVImage<sInt, 1> &img, QVImage<uChar> &buffer, QList<QPoint> &points, sInt threshold, IppiNorm norm, uInt border, uInt maxPeakCount);
01535
01539 void FindPeaks3x3(const QVImage<sFloat, 1> &img, QVImage<uChar> &buffer, QList<QPoint> &points, sFloat threshold, IppiNorm norm, uInt border, uInt maxPeakCount);
01540
01541
01552 void FindPeaks3x3GetBufferSize(const QVImage<sInt,1> &image, QVImage<uChar> &buffer);
01553
01558 void FindPeaks3x3GetBufferSize(const QVImage<sFloat,1> &image, QVImage<uChar> &buffer);
01559
01576 void FilterLaplace(const QVImage<uChar> &src, QVImage<uChar> &dest, uInt maskSize = 3);
01577
01581 void FilterLaplace(const QVImage<sShort> &src, QVImage<sShort> &dest, uInt maskSize = 3);
01582
01586 void FilterLaplace(const QVImage<sFloat> &src, QVImage<sFloat> &dest, uInt maskSize = 3);
01587
01600 void WarpPerspective(const QVImage<uChar> &src, QVImage<uChar> &dest, const double coeffs[3][3], int interpolation = IPPI_INTER_LINEAR);
01601
01602 #endif