12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327 |
- /*M///////////////////////////////////////////////////////////////////////////////////////
- //
- // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
- //
- // By downloading, copying, installing or using the software you agree to this license.
- // If you do not agree to this license, do not download, install,
- // copy or use the software.
- //
- //
- // Intel License Agreement
- // For Open Source Computer Vision Library
- //
- // Copyright (C) 2000, Intel Corporation, all rights reserved.
- // Third party copyrights are property of their respective owners.
- //
- // Redistribution and use in source and binary forms, with or without modification,
- // are permitted provided that the following conditions are met:
- //
- // * Redistribution's of source code must retain the above copyright notice,
- // this list of conditions and the following disclaimer.
- //
- // * Redistribution's in binary form must reproduce the above copyright notice,
- // this list of conditions and the following disclaimer in the documentation
- // and/or other materials provided with the distribution.
- //
- // * The name of Intel Corporation may not be used to endorse or promote products
- // derived from this software without specific prior written permission.
- //
- // This software is provided by the copyright holders and contributors "as is" and
- // any express or implied warranties, including, but not limited to, the implied
- // warranties of merchantability and fitness for a particular purpose are disclaimed.
- // In no event shall the Intel Corporation or contributors be liable for any direct,
- // indirect, incidental, special, exemplary, or consequential damages
- // (including, but not limited to, procurement of substitute goods or services;
- // loss of use, data, or profits; or business interruption) however caused
- // and on any theory of liability, whether in contract, strict liability,
- // or tort (including negligence or otherwise) arising in any way out of
- // the use of this software, even if advised of the possibility of such damage.
- //
- //M*/
- #ifndef _CVMAT_HPP_
- #define _CVMAT_HPP_
- #if 0 && (defined __cplusplus && (_MSC_VER>=1200 || defined __BORLANDC__ || defined __GNUC__))
- #if _MSC_VER >= 1200
- #pragma warning( disable: 4710 ) /* suppress "function ... is not inlined" */
- #endif
- #include <string.h>
- #include <stdio.h>
- #undef min
- #undef max
- /****************************************************************************************\
- * C++ - like operations on CvScalar *
- \****************************************************************************************/
- inline CvScalar& operator += ( CvScalar& a, const CvScalar& b )
- {
- double t0 = a.val[0] + b.val[0];
- double t1 = a.val[1] + b.val[1];
- a.val[0] = t0;
- a.val[1] = t1;
- t0 = a.val[2] + b.val[2];
- t1 = a.val[3] + b.val[3];
- a.val[2] = t0;
- a.val[3] = t1;
- return a;
- }
- inline CvScalar& operator -= ( CvScalar& a, const CvScalar& b )
- {
- double t0 = a.val[0] - b.val[0];
- double t1 = a.val[1] - b.val[1];
- a.val[0] = t0;
- a.val[1] = t1;
- t0 = a.val[2] - b.val[2];
- t1 = a.val[3] - b.val[3];
- a.val[2] = t0;
- a.val[3] = t1;
- return a;
- }
- inline CvScalar& operator *= ( CvScalar& a, double b )
- {
- double t0 = a.val[0] * b;
- double t1 = a.val[1] * b;
- a.val[0] = t0;
- a.val[1] = t1;
- t0 = a.val[2] * b;
- t1 = a.val[3] * b;
- a.val[2] = t0;
- a.val[3] = t1;
- return a;
- }
- inline CvScalar& operator /= ( CvScalar& a, double b )
- {
- double inv_b = 1./b;
- double t0 = a.val[0] * inv_b;
- double t1 = a.val[1] * inv_b;
- a.val[0] = t0;
- a.val[1] = t1;
- t0 = a.val[2] * inv_b;
- t1 = a.val[3] * inv_b;
- a.val[2] = t0;
- a.val[3] = t1;
- return a;
- }
- inline CvScalar& operator *= ( CvScalar& a, const CvScalar& b )
- {
- double t0 = a.val[0]*b.val[0] - a.val[1]*b.val[1] -
- a.val[2]*b.val[2] - a.val[3]*b.val[3];
- double t1 = a.val[0]*b.val[1] + a.val[1]*b.val[0] +
- a.val[2]*b.val[3] - a.val[3]*b.val[2];
- double t2 = a.val[0]*b.val[2] - a.val[1]*b.val[3] +
- a.val[2]*b.val[0] + a.val[3]*b.val[1];
- double t3 = a.val[0]*b.val[3] + a.val[1]*b.val[2] -
- a.val[2]*b.val[1] + a.val[3]*b.val[0];
- a.val[0] = t0;
- a.val[1] = t1;
- a.val[2] = t2;
- a.val[3] = t3;
- return a;
- }
- inline CvScalar& operator /= ( CvScalar& a, const CvScalar& b )
- {
- double inv_d = -1./(b.val[0]*b.val[0] + b.val[1]*b.val[1] +
- b.val[2]*b.val[2] + b.val[3]*b.val[3]);
- return a *= cvScalar( b.val[0] * -inv_d, b.val[1] * inv_d,
- b.val[2] * inv_d, b.val[3] * inv_d );
- }
- inline CvScalar& operator += ( CvScalar& a, double b )
- {
- a.val[0] += b;
- return a;
- }
- inline CvScalar& operator -= ( CvScalar& a, double b )
- {
- a.val[0] -= b;
- return a;
- }
- inline CvScalar operator + ( const CvScalar& a, const CvScalar& b )
- {
- return cvScalar( a.val[0] + b.val[0], a.val[1] + b.val[1],
- a.val[2] + b.val[2], a.val[3] + b.val[3] );
- }
- inline CvScalar operator - ( const CvScalar& a, const CvScalar& b )
- {
- return cvScalar( a.val[0] - b.val[0], a.val[1] - b.val[1],
- a.val[2] - b.val[2], a.val[3] - b.val[3] );
- }
- inline CvScalar operator + ( const CvScalar& a, double b )
- {
- return cvScalar( a.val[0] + b, a.val[1], a.val[2], a.val[3] );
- }
- inline CvScalar operator - ( const CvScalar& a, double b )
- {
- return cvScalar( a.val[0] - b, a.val[1], a.val[2], a.val[3] );
- }
- inline CvScalar operator + ( double a, const CvScalar& b )
- {
- return cvScalar( a + b.val[0], b.val[1], b.val[2], b.val[3] );
- }
- inline CvScalar operator - ( double a, const CvScalar& b )
- {
- return cvScalar( a - b.val[0], -b.val[1], -b.val[2], -b.val[3] );
- }
- inline CvScalar operator - ( const CvScalar& b )
- {
- return cvScalar( -b.val[0], -b.val[1], -b.val[2], -b.val[3] );
- }
- inline CvScalar operator * ( const CvScalar& a, const CvScalar& b )
- {
- CvScalar c = a;
- return (c *= b);
- }
- inline CvScalar operator * ( const CvScalar& a, double b )
- {
- return cvScalar( a.val[0]*b, a.val[1]*b, a.val[2]*b, a.val[3]*b );
- }
- inline CvScalar operator * ( double a, const CvScalar& b )
- {
- return cvScalar( b.val[0]*a, b.val[1]*a, b.val[2]*a, b.val[3]*a );
- }
- inline CvScalar operator / ( const CvScalar& a, const CvScalar& b )
- {
- CvScalar c = a;
- return (c /= b);
- }
- inline CvScalar operator / ( const CvScalar& a, double b )
- {
- double inv_b = 1./b;
- return cvScalar( a.val[0]*inv_b, a.val[1]*inv_b,
- a.val[2]*inv_b, a.val[3]*inv_b );
- }
- inline CvScalar operator / ( double a, const CvScalar& b )
- {
- double inv_d = -a/(b.val[0]*b.val[0] + b.val[1]*b.val[1] +
- b.val[2]*b.val[2] + b.val[3]*b.val[3]);
- return cvScalar( b.val[0] * -inv_d, b.val[1] * inv_d,
- b.val[2] * inv_d, b.val[3] * inv_d );
- }
- inline CvScalar& operator &= ( CvScalar& a, const CvScalar& b )
- {
- int t0 = cvRound(a.val[0]) & cvRound(b.val[0]);
- int t1 = cvRound(a.val[1]) & cvRound(b.val[1]);
- a.val[0] = t0;
- a.val[1] = t1;
- t0 = cvRound(a.val[2]) & cvRound(b.val[2]);
- t1 = cvRound(a.val[3]) & cvRound(b.val[3]);
- a.val[2] = t0;
- a.val[3] = t1;
- return a;
- }
- inline CvScalar& operator |= ( CvScalar& a, const CvScalar& b )
- {
- int t0 = cvRound(a.val[0]) | cvRound(b.val[0]);
- int t1 = cvRound(a.val[1]) | cvRound(b.val[1]);
- a.val[0] = t0;
- a.val[1] = t1;
- t0 = cvRound(a.val[2]) | cvRound(b.val[2]);
- t1 = cvRound(a.val[3]) | cvRound(b.val[3]);
- a.val[2] = t0;
- a.val[3] = t1;
- return a;
- }
- inline CvScalar& operator ^= ( CvScalar& a, const CvScalar& b )
- {
- int t0 = cvRound(a.val[0]) ^ cvRound(b.val[0]);
- int t1 = cvRound(a.val[1]) ^ cvRound(b.val[1]);
- a.val[0] = t0;
- a.val[1] = t1;
- t0 = cvRound(a.val[2]) ^ cvRound(b.val[2]);
- t1 = cvRound(a.val[3]) ^ cvRound(b.val[3]);
- a.val[2] = t0;
- a.val[3] = t1;
- return a;
- }
- inline CvScalar operator & ( const CvScalar& a, const CvScalar& b )
- {
- CvScalar c = a;
- return (c &= b);
- }
- inline CvScalar operator | ( const CvScalar& a, const CvScalar& b )
- {
- CvScalar c = a;
- return (c |= b);
- }
- inline CvScalar operator ^ ( const CvScalar& a, const CvScalar& b )
- {
- CvScalar c = a;
- return (c ^= b);
- }
- inline CvScalar operator ~ ( const CvScalar& a )
- {
- return cvScalar( ~cvRound(a.val[0]), ~cvRound(a.val[1]),
- ~cvRound(a.val[2]), ~cvRound(a.val[3]));
- }
- /****************************************************************************************\
- * C++ Matrix Class *
- \****************************************************************************************/
- struct _CvMATConstElem_;
- struct _CvMATElem_;
- struct _CvMATElemCn_;
- struct _CvMAT_T_;
- struct _CvMAT_MUL_;
- struct _CvMAT_INV_;
- struct _CvMAT_SCALE_;
- struct _CvMAT_SCALE_SHIFT_;
- struct _CvMAT_ADD_;
- struct _CvMAT_ADD_EX_;
- struct _CvMAT_MUL_ADD_;
- struct _CvMAT_LOGIC_;
- struct _CvMAT_UN_LOGIC_;
- struct _CvMAT_NOT_;
- struct _CvMAT_CVT_;
- struct _CvMAT_COPY_;
- struct _CvMAT_DOT_OP_;
- struct _CvMAT_SOLVE_;
- struct _CvMAT_CMP_;
- class CV_EXPORTS CvMAT : public CvMat
- {
- protected:
- public:
- /* helper methods for retrieving/setting matrix elements */
- static double get( const uchar* ptr, int type, int coi = 0 );
- static void set( uchar* ptr, int type, int coi, double d );
- static void set( uchar* ptr, int type, int coi, int i );
- static void set( uchar* ptr, int type, double d );
- static void set( uchar* ptr, int type, int i );
- /******************* constructors ********************/
- /* empty */
- explicit CvMAT();
- /* creation */
- explicit CvMAT( int rows, int cols, int type, void* data, int step = CV_AUTOSTEP );
- explicit CvMAT( int rows, int type, void* data, int step = CV_AUTOSTEP );
- explicit CvMAT( int rows, int cols, int type );
- explicit CvMAT( int rows, int type );
-
- /* extracting part of an existing matrix */
- explicit CvMAT( const CvMat& mat, CvRect rect ); /* submatrix */
- explicit CvMAT( const CvMat& mat, int k, int i ); /* submatrix:
- k == 0 - i-th row
- k > 0 - i-th column
- k < 0 - i-th diagonal */
- /* copying */
- CvMAT( const CvMat& mat );
- CvMAT( const CvMAT& mat );
- CvMAT( const IplImage& img );
- /* CvMAT b = op(a1,a2,...) */
- explicit CvMAT( const _CvMAT_T_& mat_t );
- explicit CvMAT( const _CvMAT_INV_& inv_mat );
- explicit CvMAT( const _CvMAT_ADD_& mat_add );
- explicit CvMAT( const _CvMAT_ADD_EX_& mat_add );
- explicit CvMAT( const _CvMAT_SCALE_& scale_mat );
- explicit CvMAT( const _CvMAT_SCALE_SHIFT_& scale_shift_mat );
- explicit CvMAT( const _CvMAT_MUL_& mmul );
- explicit CvMAT( const _CvMAT_MUL_ADD_& mmuladd );
- explicit CvMAT( const _CvMAT_LOGIC_& mat_logic );
- explicit CvMAT( const _CvMAT_UN_LOGIC_& mat_logic );
- explicit CvMAT( const _CvMAT_NOT_& not_mat );
- explicit CvMAT( const _CvMAT_COPY_& mat_copy );
- explicit CvMAT( const _CvMAT_CVT_& mat_copy );
- explicit CvMAT( const _CvMAT_DOT_OP_& dot_mul );
- explicit CvMAT( const _CvMAT_SOLVE_& solve_mat );
- explicit CvMAT( const _CvMAT_CMP_& cmp_mat );
- /* desctructor */
- ~CvMAT();
- /* copying and filling with a constant */
- CvMAT& operator = ( const CvMAT& mat );
- CvMAT& operator = ( const CvMat& mat );
- CvMAT& operator = ( const IplImage& img );
- CvMAT& operator = ( double fillval );
- CvMAT& operator = ( const CvScalar& fillval );
-
- /* b = op(a1, a2,...) */
- CvMAT& operator = ( const _CvMAT_T_& mat_t );
- CvMAT& operator = ( const _CvMAT_INV_& inv_mat );
- CvMAT& operator = ( const _CvMAT_ADD_& mat_add );
- CvMAT& operator = ( const _CvMAT_ADD_EX_& mat_add );
- CvMAT& operator = ( const _CvMAT_SCALE_& scale_mat );
- CvMAT& operator = ( const _CvMAT_SCALE_SHIFT_& scale_shift_mat );
- CvMAT& operator = ( const _CvMAT_MUL_& mmul );
- CvMAT& operator = ( const _CvMAT_MUL_ADD_& mmuladd );
- CvMAT& operator = ( const _CvMAT_LOGIC_& mat_logic );
- CvMAT& operator = ( const _CvMAT_UN_LOGIC_& mat_logic );
- CvMAT& operator = ( const _CvMAT_NOT_& not_mat );
- CvMAT& operator = ( const _CvMAT_DOT_OP_& dot_mul );
- CvMAT& operator = ( const _CvMAT_SOLVE_& solve_mat );
- CvMAT& operator = ( const _CvMAT_CMP_& cmp_mat );
- CvMAT& operator = ( const _CvMAT_CVT_& mat_cvt );
- /* copy matrix data, not only matrix header */
- CvMAT& operator = ( const _CvMAT_COPY_& mat_copy );
- /* augmented assignments */
- CvMAT& operator += ( const CvMat& mat );
- CvMAT& operator += ( double val );
- CvMAT& operator += ( const CvScalar& val );
- CvMAT& operator += ( const _CvMAT_SCALE_& scale_mat );
- CvMAT& operator += ( const _CvMAT_SCALE_SHIFT_& scale_mat );
- CvMAT& operator += ( const _CvMAT_MUL_& mmul );
- CvMAT& operator -= ( const CvMat& mat );
- CvMAT& operator -= ( double val );
- CvMAT& operator -= ( const CvScalar& val );
- CvMAT& operator -= ( const _CvMAT_SCALE_& scale_mat );
- CvMAT& operator -= ( const _CvMAT_SCALE_SHIFT_& scale_mat );
- CvMAT& operator -= ( const _CvMAT_MUL_& mmul );
- CvMAT& operator *= ( const CvMat& mat );
- CvMAT& operator *= ( double val );
- CvMAT& operator *= ( const CvScalar& val );
- CvMAT& operator *= ( const _CvMAT_SCALE_& scale_mat );
- CvMAT& operator *= ( const _CvMAT_SCALE_SHIFT_& scale_mat );
- CvMAT& operator &= ( const CvMat& mat );
- CvMAT& operator &= ( double val );
- CvMAT& operator &= ( const CvScalar& val );
- CvMAT& operator |= ( const CvMat& mat );
- CvMAT& operator |= ( double val );
- CvMAT& operator |= ( const CvScalar& val );
- CvMAT& operator ^= ( const CvMat& mat );
- CvMAT& operator ^= ( double val );
- CvMAT& operator ^= ( const CvScalar& val );
- /* various scalar charactertics */
- double norm( int norm_type = CV_L2 ) const;
- double norm( CvMat& mat, int norm_type = CV_L2 ) const;
- CvScalar sum() const;
- double det() const;
- double trace() const;
- _CvMAT_T_ t() const; /* transposition */
- _CvMAT_INV_ inv(int method = 0) const;
- /* inversion using one of the following methods:
- method = 0 - Gaussian elimination,
- method = 1 - SVD */
- _CvMAT_DOT_OP_ mul( const CvMAT& mat ) const;
- _CvMAT_DOT_OP_ mul( const _CvMAT_SCALE_& mat ) const;
- _CvMAT_DOT_OP_ div( const CvMAT& mat ) const;
- _CvMAT_DOT_OP_ div( const _CvMAT_SCALE_& mat ) const;
- _CvMAT_DOT_OP_ min( const CvMAT& mat ) const;
- _CvMAT_DOT_OP_ max( const CvMAT& mat ) const;
- _CvMAT_DOT_OP_ min( double value ) const;
- _CvMAT_DOT_OP_ max( double value ) const;
- double min( CvPoint* minloc = 0 ) const;
- double max( CvPoint* maxloc = 0 ) const;
- _CvMAT_DOT_OP_ abs() const;
-
- /* accessing matrix elements */
- _CvMATElem_ operator ()( int row );
- _CvMATConstElem_ operator ()( int row ) const;
- _CvMATElem_ operator ()( int row, int col );
- _CvMATConstElem_ operator ()( int row, int col ) const;
- _CvMATElem_ operator ()( CvPoint loc );
- _CvMATConstElem_ operator ()( CvPoint loc ) const;
- _CvMATElemCn_ operator()( int row, int col, int coi );
- double operator()( int row, int col, int coi ) const;
- _CvMATElemCn_ operator()( CvPoint pt, int coi );
- double operator()( CvPoint pt, int coi ) const;
- void* ptr( int row );
- const void* ptr( int row ) const;
- void* ptr( int row, int col );
- const void* ptr( int row, int col ) const;
- void* ptr( CvPoint pt );
- const void* ptr( CvPoint pt ) const;
- /* accessing matrix parts */
- CvMAT row( int row ) const;
- CvMAT rowrange( int row1, int row2 ) const;
- CvMAT col( int col ) const;
- CvMAT colrange( int col1, int col2 ) const;
- CvMAT rect( CvRect rect ) const;
- CvMAT diag( int diag = 0 ) const;
- _CvMAT_COPY_ clone() const;
- /* convert matrix */
- _CvMAT_CVT_ cvt( int newdepth = -1, double scale = 1,
- double shift = 0 ) const;
- /* matrix transformation */
- void reshape( int newcn, int newrows = 0 );
- void flipX();
- void flipY();
- void flipXY();
- /* matrix I/O: use dynamically linked runtime libraries */
- void write( const char* name = 0, FILE* f = 0, const char* fmt = 0 );
- void read( char** name = 0, FILE* f = 0 );
- /* decrease matrix data reference counter and clear data pointer */
- void release();
- protected:
-
- void create( int rows, int cols, int type );
- };
- /* !!! Internal Use Only !!! */
- /* proxies for matrix elements */
- /* const_A(i,j) */
- struct CV_EXPORTS _CvMATConstElem_
- {
- explicit _CvMATConstElem_( const uchar* ptr, int type );
- operator CvScalar () const;
- double operator ()( int coi = 0 ) const;
- uchar* ptr;
- int type;
- };
- /* A(i,j,cn) or A(i,j)(cn) */
- struct CV_EXPORTS _CvMATElemCn_
- {
- explicit _CvMATElemCn_( uchar* ptr, int type, int coi );
- operator double() const;
-
- _CvMATElemCn_& operator = ( const _CvMATConstElem_& elem );
- _CvMATElemCn_& operator = ( const _CvMATElemCn_& elem );
- _CvMATElemCn_& operator = ( const CvScalar& scalar );
- _CvMATElemCn_& operator = ( double d );
- _CvMATElemCn_& operator = ( float f );
- _CvMATElemCn_& operator = ( int i );
- uchar* ptr;
- int type;
- };
- /* A(i,j) */
- struct CV_EXPORTS _CvMATElem_ : public _CvMATConstElem_
- {
- explicit _CvMATElem_( uchar* ptr, int type );
- _CvMATElemCn_ operator ()( int coi = 0 );
- _CvMATElem_& operator = ( const _CvMATConstElem_& elem );
- _CvMATElem_& operator = ( const _CvMATElem_& elem );
- _CvMATElem_& operator = ( const _CvMATElemCn_& elem );
- _CvMATElem_& operator = ( const CvScalar& val );
- _CvMATElem_& operator = ( double d );
- _CvMATElem_& operator = ( float f );
- _CvMATElem_& operator = ( int i );
- };
- struct CV_EXPORTS _CvMAT_BASE_OP_
- {
- _CvMAT_BASE_OP_() {};
- virtual operator CvMAT() const = 0;
- _CvMAT_DOT_OP_ mul( const CvMAT& a ) const;
- _CvMAT_DOT_OP_ mul( const _CvMAT_SCALE_& a ) const;
- _CvMAT_DOT_OP_ div( const CvMAT& a ) const;
- _CvMAT_DOT_OP_ div( const _CvMAT_SCALE_& a ) const;
- _CvMAT_DOT_OP_ max( const CvMAT& a ) const;
- _CvMAT_DOT_OP_ min( const CvMAT& a ) const;
- _CvMAT_DOT_OP_ max( double value ) const;
- _CvMAT_DOT_OP_ min( double value ) const;
- double max( CvPoint* maxloc = 0 ) const;
- double min( CvPoint* minloc = 0 ) const;
- _CvMAT_DOT_OP_ abs() const;
- _CvMAT_INV_ inv( int method = 0 ) const;
- _CvMAT_T_ t() const;
- CvMAT row( int row ) const;
- CvMAT rowrange( int row1, int row2 ) const;
- CvMAT col( int col ) const;
- CvMAT colrange( int col1, int col2 ) const;
- CvMAT rect( CvRect rect ) const;
- CvMAT diag( int diag = 0 ) const;
- _CvMAT_CVT_ cvt( int newdepth = -1, double scale = 1, double shift = 0 ) const;
-
- double norm( int norm_type = CV_L2 ) const;
- double det() const;
- double trace() const;
- CvScalar sum() const;
- };
- /* (A^t)*alpha */
- struct CV_EXPORTS _CvMAT_T_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_T_( const CvMAT* a );
- explicit _CvMAT_T_( const CvMAT* a, double alpha );
-
- double det() const;
- double norm( int normType = CV_L2 ) const;
- operator CvMAT() const;
- CvMAT a;
- double alpha;
- };
- /* inv(A) */
- struct CV_EXPORTS _CvMAT_INV_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_INV_( const CvMAT* mat, int method );
- operator CvMAT() const;
- CvMAT a;
- int method;
- };
- /* (A^ta)*(B^tb)*alpha */
- struct CV_EXPORTS _CvMAT_MUL_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_MUL_( const CvMAT* a, const CvMAT* b, int t_ab );
- explicit _CvMAT_MUL_( const CvMAT* a, const CvMAT* b,
- double alpha, int t_abc );
- operator CvMAT() const;
- double alpha;
- CvMAT* a;
- CvMAT* b;
- int t_ab; /* (t_ab & 1) = ta, (t_ab & 2) = tb */
- };
- /* (A^ta)*(B^tb)*alpha + (C^tc)*beta */
- struct CV_EXPORTS _CvMAT_MUL_ADD_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_MUL_ADD_( const CvMAT* a, const CvMAT* b,
- const CvMAT* c, int t_abc );
- explicit _CvMAT_MUL_ADD_( const CvMAT* a, const CvMAT* b, double alpha,
- const CvMAT* c, double beta, int t_abc );
- operator CvMAT() const;
- double alpha, beta;
- CvMAT* a;
- CvMAT* b;
- CvMAT* c;
- int t_abc; /* (t_abc & 1) = ta, (t_abc & 2) = tb, (t_abc & 4) = tc */
- };
- /* A + B*beta */
- struct CV_EXPORTS _CvMAT_ADD_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_ADD_( const CvMAT* a, const CvMAT* b, double beta = 1 );
- operator CvMAT() const;
- double norm( int norm_type = CV_L2 ) const;
- _CvMAT_DOT_OP_ abs() const;
- double beta;
- CvMAT* a;
- CvMAT* b;
- };
- /* A*alpha + B*beta + gamma */
- struct CV_EXPORTS _CvMAT_ADD_EX_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_ADD_EX_( const CvMAT* a, double alpha,
- const CvMAT* b, double beta, double gamma = 0 );
- operator CvMAT() const;
- double alpha, beta, gamma;
- CvMAT* a;
- CvMAT* b;
- };
- /* A*alpha */
- struct CV_EXPORTS _CvMAT_SCALE_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_SCALE_( const CvMAT* a, double alpha );
- operator CvMAT() const;
- _CvMAT_DOT_OP_ mul( const CvMAT& a ) const;
- _CvMAT_DOT_OP_ mul( const _CvMAT_SCALE_& a ) const;
- _CvMAT_DOT_OP_ div( const CvMAT& a ) const;
- _CvMAT_DOT_OP_ div( const _CvMAT_SCALE_& a ) const;
- double alpha;
- CvMAT* a;
- };
- /* A*alpha + beta */
- struct CV_EXPORTS _CvMAT_SCALE_SHIFT_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_SCALE_SHIFT_( const CvMAT* a, double alpha, double beta );
- operator CvMAT() const;
- _CvMAT_DOT_OP_ abs() const;
- double alpha, beta;
- CvMAT* a;
- };
- /* (A & B), (A | B) or (A ^ B) */
- struct CV_EXPORTS _CvMAT_LOGIC_ : public _CvMAT_BASE_OP_
- {
- enum Op { AND = 0, OR = 1, XOR = 2 };
- explicit _CvMAT_LOGIC_( const CvMAT* a, const CvMAT* b, Op op, int flags = 0 );
- operator CvMAT() const;
- CvMAT* a;
- CvMAT* b;
- Op op;
- int flags;
- };
- /* (A & scalar), (A | scalar) or (A ^ scalar) */
- struct CV_EXPORTS _CvMAT_UN_LOGIC_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_UN_LOGIC_( const CvMAT* a, double alpha,
- _CvMAT_LOGIC_::Op op, int flags = 0 );
- operator CvMAT() const;
- CvMAT* a;
- double alpha;
- _CvMAT_LOGIC_::Op op;
- int flags;
- };
- /* ~A */
- struct CV_EXPORTS _CvMAT_NOT_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_NOT_( const CvMAT* a );
- operator CvMAT() const;
- CvMAT* a;
- };
- /* conversion of data type */
- struct CV_EXPORTS _CvMAT_CVT_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_CVT_( const CvMAT* a, int newdepth = -1,
- double scale = 1, double shift = 0 );
- operator CvMAT() const;
- CvMAT a;
- int newdepth;
- double scale, shift;
- };
- /* conversion of data type */
- struct CV_EXPORTS _CvMAT_COPY_
- {
- explicit _CvMAT_COPY_( const CvMAT* a );
- operator CvMAT() const;
- CvMAT* a;
- };
- /* a.op(b), where op = mul, div, min, max ... */
- struct CV_EXPORTS _CvMAT_DOT_OP_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_DOT_OP_( const CvMAT* a, const CvMAT* b,
- int op, double alpha = 1 );
- operator CvMAT() const;
- CvMAT a; /* keep the left operand copy */
- CvMAT* b;
- double alpha;
- int op;
- };
- /* A.inv()*B or A.pinv()*B */
- struct CV_EXPORTS _CvMAT_SOLVE_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_SOLVE_( const CvMAT* a, const CvMAT* b, int method );
- operator CvMAT() const;
- CvMAT* a;
- CvMAT* b;
- int method;
- };
- /* A <=> B */
- struct CV_EXPORTS _CvMAT_CMP_ : public _CvMAT_BASE_OP_
- {
- explicit _CvMAT_CMP_( const CvMAT* a, const CvMAT* b, int cmp_op );
- explicit _CvMAT_CMP_( const CvMAT* a, double alpha, int cmp_op );
- operator CvMAT() const;
- CvMAT* a;
- CvMAT* b;
- double alpha;
- int cmp_op;
- };
- /************************* _CvMATConstElem_ inline methods ******************************/
- inline _CvMATConstElem_::_CvMATConstElem_(const uchar* p, int t) : ptr((uchar*)p), type(t)
- {}
- inline _CvMATConstElem_::operator CvScalar() const
- {
- CvScalar scalar;
- cvRawDataToScalar( ptr, type, &scalar );
- return scalar;
- }
- inline double _CvMATConstElem_::operator ()( int coi ) const
- { return CvMAT::get( ptr, type, coi ); }
- inline _CvMATElemCn_::_CvMATElemCn_( uchar* p, int t, int coi ) :
- ptr(p), type(CV_MAT_DEPTH(t))
- {
- if( coi )
- {
- assert( (unsigned)coi < (unsigned)CV_MAT_CN(t) );
- ptr += coi * CV_ELEM_SIZE(type);
- }
- }
- inline _CvMATElemCn_::operator double() const
- { return CvMAT::get( ptr, type ); }
- inline _CvMATElemCn_& _CvMATElemCn_::operator = ( const _CvMATConstElem_& elem )
- {
- if( type == elem.type )
- memcpy( ptr, elem.ptr, CV_ELEM_SIZE(type) );
- else
- {
- assert( CV_MAT_CN(elem.type) == 1 );
- CvMAT::set( ptr, type, 0, elem(0));
- }
- return *this;
- }
- inline _CvMATElemCn_& _CvMATElemCn_::operator = ( const _CvMATElemCn_& elem )
- {
- if( type == elem.type )
- memcpy( ptr, elem.ptr, CV_ELEM_SIZE(type) );
- else
- CvMAT::set( ptr, type, 0, (double)elem );
- return *this;
- }
- inline _CvMATElemCn_& _CvMATElemCn_::operator = ( const CvScalar& scalar )
- {
- CvMAT::set( ptr, type, 0, scalar.val[0] );
- return *this;
- }
- inline _CvMATElemCn_& _CvMATElemCn_::operator = ( double d )
- {
- CvMAT::set( ptr, type, 0, d );
- return *this;
- }
- inline _CvMATElemCn_& _CvMATElemCn_::operator = ( float f )
- {
- CvMAT::set( ptr, type, 0, (double)f );
- return *this;
- }
- inline _CvMATElemCn_& _CvMATElemCn_::operator = ( int i )
- {
- CvMAT::set( ptr, type, 0, i );
- return *this;
- }
- inline _CvMATElem_::_CvMATElem_( uchar* p, int t ) : _CvMATConstElem_( (const uchar*)p, t )
- {}
- inline _CvMATElemCn_ _CvMATElem_::operator ()( int coi )
- { return _CvMATElemCn_( ptr, type, coi ); }
- inline _CvMATElem_& _CvMATElem_::operator = ( const _CvMATConstElem_& elem )
- {
- if( type == elem.type )
- memcpy( ptr, elem.ptr, CV_ELEM_SIZE(type) );
- else
- {
- assert( CV_MAT_CN( type ^ elem.type ) == 0 );
- CvScalar sc = (CvScalar)elem;
- cvScalarToRawData( &sc, ptr, type, 0 );
- }
- return *this;
- }
- inline _CvMATElem_& _CvMATElem_::operator = ( const _CvMATElem_& elem )
- {
- *this = (const _CvMATConstElem_&)elem;
- return *this;
- }
- inline _CvMATElem_& _CvMATElem_::operator = ( const _CvMATElemCn_& elem )
- {
- if( type == elem.type )
- memcpy( ptr, elem.ptr, CV_ELEM_SIZE(type) );
- else
- CvMAT::set( ptr, type, (double)elem );
- return *this;
- }
- inline _CvMATElem_& _CvMATElem_::operator = ( const CvScalar& scalar )
- {
- cvScalarToRawData( &scalar, ptr, type, 0 );
- return *this;
- }
- inline _CvMATElem_& _CvMATElem_::operator = ( double d )
- {
- CvMAT::set( ptr, type, d );
- return *this;
- }
- inline _CvMATElem_& _CvMATElem_::operator = ( float f )
- {
- CvMAT::set( ptr, type, (double)f );
- return *this;
- }
- inline _CvMATElem_& _CvMATElem_::operator = ( int i )
- {
- CvMAT::set( ptr, type, i );
- return *this;
- }
- /********************************** CvMAT inline methods ********************************/
- inline CvMAT::CvMAT()
- {
- memset( this, 0, sizeof(*this));
- }
- inline CvMAT::CvMAT( int rows, int cols, int type, void* data, int step )
- {
- cvInitMatHeader( this, rows, cols, type, data, step );
- }
- inline CvMAT::CvMAT( int rows, int type, void* data, int step )
- {
- cvInitMatHeader( this, rows, 1, type, data, step );
- }
- inline void CvMAT::create( int rows, int cols, int type )
- {
- int step = cols*CV_ELEM_SIZE(type), total_size = step*rows;
- this->rows = rows;
- this->cols = cols;
- this->step = rows == 1 ? 0 : step;
- this->type = CV_MAT_MAGIC_VAL | (type & CV_MAT_TYPE_MASK) | CV_MAT_CONT_FLAG;
- refcount = (int*)cvAlloc((size_t)total_size + 8);
- data.ptr = (uchar*)(((size_t)(refcount + 1) + 7) & -8);
- *refcount = 1;
- }
- inline CvMAT::CvMAT( int rows, int cols, int type )
- {
- create( rows, cols, type );
- }
- inline CvMAT::CvMAT( int rows, int type )
- {
- create( rows, 1, type );
- }
- inline CvMAT::CvMAT( const CvMat& mat )
- {
- memcpy( this, &mat, sizeof(mat));
- if( refcount )
- (*refcount)++;
- }
- inline CvMAT::CvMAT( const CvMAT& mat )
- {
- memcpy( this, &mat, sizeof(mat));
- if( refcount )
- (*refcount)++;
- }
- inline CvMAT::CvMAT( const IplImage& img )
- {
- cvGetMat( &img, this );
- }
- inline void CvMAT::release()
- {
- data.ptr = NULL;
- if( refcount != NULL && --*refcount == 0 )
- cvFree( (void**)&refcount );
- refcount = 0;
- }
- inline CvMAT::~CvMAT()
- {
- release();
- }
- inline CvMAT& CvMAT::operator = ( const CvMAT& mat )
- {
- if( this != &mat )
- {
- release();
- memcpy( this, &mat, sizeof(mat));
- if( refcount )
- (*refcount)++;
- }
- return *this;
- }
- inline CvMAT& CvMAT::operator = ( const CvMat& mat )
- {
- *this = (const CvMAT&)mat;
- return *this;
- }
- inline CvMAT& CvMAT::operator = ( const IplImage& img )
- {
- release();
- cvGetMat( &img, this );
- return *this;
- }
- inline CvMAT& CvMAT::operator = ( double fillval )
- {
- cvFillImage( this, fillval );
- return *this;
- }
- inline CvMAT& CvMAT::operator = ( const CvScalar& fillval )
- {
- cvSet( this, fillval );
- return *this;
- }
- inline CvMAT& CvMAT::operator += ( const CvMat& mat )
- {
- cvAdd( this, &mat, this );
- return *this;
- }
- inline CvMAT& CvMAT::operator += ( double val )
- {
- cvAddS( this, cvScalar(val), this );
- return *this;
- }
- inline CvMAT& CvMAT::operator += ( const CvScalar& val )
- {
- cvAddS( this, val, this );
- return *this;
- }
- inline CvMAT& CvMAT::operator -= ( const CvMat& mat )
- {
- cvSub( this, &mat, this );
- return *this;
- }
- inline CvMAT& CvMAT::operator -= ( double val )
- {
- cvSubS( this, cvScalar(val), this );
- return *this;
- }
- inline CvMAT& CvMAT::operator -= ( const CvScalar& val )
- {
- cvSubS( this, val, this );
- return *this;
- }
- inline CvMAT& CvMAT::operator *= ( const CvMat& mat )
- {
- cvMul( this, &mat, this );
- return *this;
- }
- inline CvMAT& CvMAT::operator *= ( double val )
- {
- cvScale( this, this, val, 0 );
- return *this;
- }
- inline CvMAT& CvMAT::operator *= ( const CvScalar& val )
- {
- cvScaleAdd( this, val, 0, this );
- return *this;
- }
- inline CvMAT& CvMAT::operator &= ( const CvMat& mat )
- {
- cvAnd( this, &mat, this );
- return *this;
- }
- inline CvMAT& CvMAT::operator &= ( double val )
- {
- cvAndS( this, cvScalarAll(val), this );
- return *this;
- }
- inline CvMAT& CvMAT::operator &= ( const CvScalar& val )
- {
- cvAndS( this, val, this );
- return *this;
- }
- inline CvMAT& CvMAT::operator |= ( const CvMat& mat )
- {
- cvOr( this, &mat, this );
- return *this;
- }
- inline CvMAT& CvMAT::operator |= ( double val )
- {
- cvOrS( this, cvScalarAll(val), this );
- return *this;
- }
- inline CvMAT& CvMAT::operator |= ( const CvScalar& val )
- {
- cvOrS( this, val, this );
- return *this;
- }
- inline CvMAT& CvMAT::operator ^= ( const CvMat& mat )
- {
- cvXor( this, &mat, this );
- return *this;
- }
- inline CvMAT& CvMAT::operator ^= ( double val )
- {
- cvXorS( this, cvScalarAll(val), this );
- return *this;
- }
- inline CvMAT& CvMAT::operator ^= ( const CvScalar& val )
- {
- cvXorS( this, val, this );
- return *this;
- }
- inline double CvMAT::norm( int normType ) const
- { return cvNorm( this, 0, normType ); }
- inline double CvMAT::min( CvPoint* minloc ) const
- {
- double t;
- cvMinMaxLoc( this, &t, 0, minloc, 0, 0 );
- return t;
- }
- inline double CvMAT::max( CvPoint* maxloc ) const
- {
- double t;
- cvMinMaxLoc( this, 0, &t, 0, maxloc, 0 );
- return t;
- }
- inline double CvMAT::norm( CvMat& mat, int normType ) const
- { return cvNorm( this, &mat, normType ); }
- inline CvScalar CvMAT::sum() const
- { return cvSum( this ); }
- inline double CvMAT::det() const
- { return cvDet( this ); }
- inline void CvMAT::reshape( int newcn, int newrows )
- { cvReshape( this, this, newcn, newrows ); }
- inline void CvMAT::flipX()
- { cvFlip( this, this, 1 ); }
- inline void CvMAT::flipY()
- { cvFlip( this, this, 0 ); }
- inline void CvMAT::flipXY()
- { cvFlip( this, this, -1 ); }
- inline _CvMATElem_ CvMAT::operator ()( int row )
- { return _CvMATElem_( CV_MAT_ELEM_PTR( *this, row, 0 ), type ); }
- inline _CvMATConstElem_ CvMAT::operator ()( int row ) const
- { return _CvMATConstElem_( CV_MAT_ELEM_PTR( *this, row, 0 ), type ); }
- inline _CvMATElem_ CvMAT::operator ()( int row, int col )
- { return _CvMATElem_( CV_MAT_ELEM_PTR( *this, row, col ), type ); }
- inline _CvMATConstElem_ CvMAT::operator ()( int row, int col ) const
- { return _CvMATConstElem_( CV_MAT_ELEM_PTR( *this, row, col ), type ); }
- inline _CvMATElemCn_ CvMAT::operator()( int row, int col, int coi )
- { return _CvMATElemCn_( CV_MAT_ELEM_PTR( *this, row, col ), type, coi ); }
- inline _CvMATElemCn_ CvMAT::operator()( CvPoint pt, int coi )
- { return _CvMATElemCn_( CV_MAT_ELEM_PTR( *this, pt.y, pt.x ), type, coi ); }
- inline double CvMAT::operator()( int row, int col, int coi ) const
- { return get( CV_MAT_ELEM_PTR( *this, row, col ), type, coi ); }
- inline _CvMATElem_ CvMAT::operator ()( CvPoint pt )
- { return _CvMATElem_( CV_MAT_ELEM_PTR( *this, pt.y, pt.x ), type ); }
- inline _CvMATConstElem_ CvMAT::operator ()( CvPoint pt ) const
- { return _CvMATConstElem_( CV_MAT_ELEM_PTR( *this, pt.y, pt.x ), type ); }
- inline double CvMAT::operator()( CvPoint pt, int coi ) const
- { return get( CV_MAT_ELEM_PTR( *this, pt.y, pt.x ), type, coi ); }
- inline void* CvMAT::ptr( int row )
- { return CV_MAT_ELEM_PTR( *this, row, 0 ); }
- inline const void* CvMAT::ptr( int row ) const
- { return (const void*)CV_MAT_ELEM_PTR( *this, row, 0 ); }
- inline void* CvMAT::ptr( int row, int col )
- { return CV_MAT_ELEM_PTR( *this, row, col ); }
- inline const void* CvMAT::ptr( int row, int col ) const
- { return (const void*)CV_MAT_ELEM_PTR( *this, row, col ); }
- inline void* CvMAT::ptr( CvPoint pt )
- { return CV_MAT_ELEM_PTR( *this, pt.y, pt.x ); }
- inline const void* CvMAT::ptr( CvPoint pt ) const
- { return (const void*)CV_MAT_ELEM_PTR( *this, pt.y, pt.x ); }
- inline _CvMAT_INV_ CvMAT::inv( int method ) const
- { return _CvMAT_INV_( this, method ); }
- inline _CvMAT_T_ CvMAT::t() const
- { return _CvMAT_T_( this ); }
- inline _CvMAT_COPY_ CvMAT::clone() const
- { return _CvMAT_COPY_( this ); }
- inline _CvMAT_CVT_ CvMAT::cvt( int newdepth, double scale, double shift ) const
- { return _CvMAT_CVT_( this, newdepth, scale, shift ); }
- inline CvMAT::CvMAT( const CvMat& mat, CvRect rect )
- {
- type = 0;
- cvGetSubArr( &mat, this, rect );
- cvIncRefData( this );
- }
- /* submatrix:
- k == 0 - i-th row
- k > 0 - i-th column
- k < 0 - i-th diagonal */
- inline CvMAT::CvMAT( const CvMat& mat, int k, int i )
- {
- type = 0;
- if( k == 0 )
- cvGetRow( &mat, this, i );
- else if( k > 0 )
- cvGetCol( &mat, this, i );
- else
- cvGetDiag( &mat, this, i );
- cvIncRefData( this );
- }
- inline CvMAT CvMAT::row( int r ) const
- { return CvMAT( *this, 0, r ); }
- inline CvMAT CvMAT::col( int c ) const
- { return CvMAT( *this, 1, c ); }
- inline CvMAT CvMAT::diag( int d ) const
- { return CvMAT( *this, -1, d ); }
- inline CvMAT CvMAT::rect( CvRect rect ) const
- { return CvMAT( *this, rect ); }
- inline CvMAT CvMAT::rowrange( int row1, int row2 ) const
- {
- assert( 0 <= row1 && row1 < row2 && row2 <= height );
- return CvMAT( *this, cvRect( 0, row1, width, row2 - row1 ));
- }
- inline CvMAT CvMAT::colrange( int col1, int col2 ) const
- {
- assert( 0 <= col1 && col1 < col2 && col2 <= width );
- return CvMAT( *this, cvRect( col1, 0, col2 - col1, height ));
- }
- inline _CvMAT_DOT_OP_ CvMAT::mul( const CvMAT& mat ) const
- { return _CvMAT_DOT_OP_( this, &mat, '*' ); }
- inline _CvMAT_DOT_OP_ CvMAT::mul( const _CvMAT_SCALE_& mat ) const
- { return _CvMAT_DOT_OP_( this, mat.a, '*', mat.alpha ); }
- inline _CvMAT_DOT_OP_ CvMAT::div( const CvMAT& mat ) const
- { return _CvMAT_DOT_OP_( this, &mat, '/' ); }
- inline _CvMAT_DOT_OP_ CvMAT::div( const _CvMAT_SCALE_& mat ) const
- { return _CvMAT_DOT_OP_( this, mat.a, '/', 1./mat.alpha ); }
- inline _CvMAT_DOT_OP_ CvMAT::min( const CvMAT& mat ) const
- { return _CvMAT_DOT_OP_( this, &mat, 'm' ); }
- inline _CvMAT_DOT_OP_ CvMAT::max( const CvMAT& mat ) const
- { return _CvMAT_DOT_OP_( this, &mat, 'M' ); }
- inline _CvMAT_DOT_OP_ CvMAT::min( double value ) const
- { return _CvMAT_DOT_OP_( this, 0, 'm', value ); }
- inline _CvMAT_DOT_OP_ CvMAT::max( double value ) const
- { return _CvMAT_DOT_OP_( this, 0, 'M', value ); }
- inline _CvMAT_DOT_OP_ CvMAT::abs() const
- { return _CvMAT_DOT_OP_( this, 0, 'a', 0 ); }
- /****************************************************************************************\
- * binary operations (+,-,*) *
- \****************************************************************************************/
- /*
- * PART I. Scaling, shifting, addition/subtraction operations
- */
- /* (mat2^t) = (mat1^t) * scalar */
- inline _CvMAT_T_ operator * ( const _CvMAT_T_& a, double alpha )
- { return _CvMAT_T_( &a.a, a.alpha*alpha ); }
- /* (mat2^t) = scalar * (mat1^t) */
- inline _CvMAT_T_ operator * ( double alpha, const _CvMAT_T_& a )
- { return _CvMAT_T_( &a.a, a.alpha*alpha ); }
- /* -(mat^t) */
- inline _CvMAT_T_ operator - ( const _CvMAT_T_& a )
- { return _CvMAT_T_( &a.a, -a.alpha ); }
- /* mat_scaled = mat * scalar */
- inline _CvMAT_SCALE_ operator * ( const CvMAT& a, double alpha )
- { return _CvMAT_SCALE_( &a, alpha ); }
- /* mat_scaled = scalar * mat */
- inline _CvMAT_SCALE_ operator * ( double alpha, const CvMAT& a )
- { return _CvMAT_SCALE_( &a, alpha ); }
- /* mat_scaled2 = mat_scaled1 * scalar */
- inline _CvMAT_SCALE_ operator * ( const _CvMAT_SCALE_& a, double alpha )
- { return _CvMAT_SCALE_( a.a, a.alpha*alpha ); }
- /* mat_scaled2 = scalar * mat_scaled1 */
- inline _CvMAT_SCALE_ operator * ( double alpha, const _CvMAT_SCALE_& a )
- { return _CvMAT_SCALE_( a.a, a.alpha*alpha ); }
- /* -mat_scaled */
- inline _CvMAT_SCALE_ operator - ( const _CvMAT_SCALE_& a )
- { return _CvMAT_SCALE_( a.a, -a.alpha ); }
- /* mat_scaled_shifted = mat + scalar */
- inline _CvMAT_SCALE_SHIFT_ operator + ( const CvMAT& a, double beta )
- { return _CvMAT_SCALE_SHIFT_( &a, 1, beta ); }
- /* mat_scaled_shifted = scalar + mat */
- inline _CvMAT_SCALE_SHIFT_ operator + ( double beta, const CvMAT& a )
- { return _CvMAT_SCALE_SHIFT_( &a, 1, beta ); }
- /* mat_scaled_shifted = mat - scalar */
- inline _CvMAT_SCALE_SHIFT_ operator - ( const CvMAT& a, double beta )
- { return _CvMAT_SCALE_SHIFT_( &a, 1, -beta ); }
- /* mat_scaled_shifted = scalar - mat */
- inline _CvMAT_SCALE_SHIFT_ operator - ( double beta, const CvMAT& a )
- { return _CvMAT_SCALE_SHIFT_( &a, -1, beta ); }
- /* mat_scaled_shifted = mat_scaled + scalar */
- inline _CvMAT_SCALE_SHIFT_ operator + ( const _CvMAT_SCALE_& a, double beta )
- { return _CvMAT_SCALE_SHIFT_( a.a, a.alpha, beta ); }
- /* mat_scaled_shifted = scalar + mat_scaled */
- inline _CvMAT_SCALE_SHIFT_ operator + ( double beta, const _CvMAT_SCALE_& a )
- { return _CvMAT_SCALE_SHIFT_( a.a, a.alpha, beta ); }
- /* mat_scaled_shifted = mat_scaled - scalar */
- inline _CvMAT_SCALE_SHIFT_ operator - ( const _CvMAT_SCALE_& a, double beta )
- { return _CvMAT_SCALE_SHIFT_( a.a, a.alpha, -beta ); }
- /* mat_scaled_shifted = scalar - mat_scaled */
- inline _CvMAT_SCALE_SHIFT_ operator - ( double beta, const _CvMAT_SCALE_& a )
- { return _CvMAT_SCALE_SHIFT_( a.a, -a.alpha, beta ); }
- /* mat_scaled_shifted2 = mat_scaled_shifted1 + scalar */
- inline _CvMAT_SCALE_SHIFT_ operator + ( const _CvMAT_SCALE_SHIFT_& a, double beta )
- { return _CvMAT_SCALE_SHIFT_( a.a, a.alpha, a.beta + beta ); }
- /* mat_scaled_shifted2 = scalar + mat_scaled_shifted1 */
- inline _CvMAT_SCALE_SHIFT_ operator + ( double beta, const _CvMAT_SCALE_SHIFT_& a )
- { return _CvMAT_SCALE_SHIFT_( a.a, a.alpha, a.beta + beta ); }
- /* mat_scaled_shifted2 = mat_scaled_shifted1 - scalar */
- inline _CvMAT_SCALE_SHIFT_ operator - ( const _CvMAT_SCALE_SHIFT_& a, double beta )
- { return _CvMAT_SCALE_SHIFT_( a.a, a.alpha, a.beta - beta ); }
- /* mat_scaled_shifted2 = scalar - mat_scaled_shifted1 */
- inline _CvMAT_SCALE_SHIFT_ operator - ( double beta, const _CvMAT_SCALE_SHIFT_& a )
- { return _CvMAT_SCALE_SHIFT_( a.a, -a.alpha, beta - a.beta ); }
- /* mat_scaled_shifted2 = mat_scaled_shifted1 * scalar */
- inline _CvMAT_SCALE_SHIFT_ operator * ( const _CvMAT_SCALE_SHIFT_& a, double alpha )
- { return _CvMAT_SCALE_SHIFT_( a.a, a.alpha*alpha, a.beta*alpha ); }
- /* mat_scaled_shifted2 = scalar * mat_scaled_shifted1 */
- inline _CvMAT_SCALE_SHIFT_ operator * ( double alpha, const _CvMAT_SCALE_SHIFT_& a )
- { return _CvMAT_SCALE_SHIFT_( a.a, a.alpha*alpha, a.beta*alpha ); }
- /* -mat_scaled_shifted */
- inline _CvMAT_SCALE_SHIFT_ operator - ( const _CvMAT_SCALE_SHIFT_& a )
- { return _CvMAT_SCALE_SHIFT_( a.a, -a.alpha, -a.beta ); }
- /* -mat1 */
- inline _CvMAT_SCALE_ operator - ( const CvMAT& a )
- { return _CvMAT_SCALE_( &a, -1 ); }
- /* mat_add = mat1 + mat2 */
- inline _CvMAT_ADD_ operator + ( const CvMAT& a, const CvMAT& b )
- { return _CvMAT_ADD_( &a, &b ); }
- /* mat_add = mat1 - mat2 */
- inline _CvMAT_ADD_ operator - ( const CvMAT& a, const CvMAT& b )
- { return _CvMAT_ADD_( &a, &b, -1 ); }
- /* mat_add = mat_scaled1 + mat2 */
- inline _CvMAT_ADD_ operator + ( const _CvMAT_SCALE_& a, const CvMAT& b )
- { return _CvMAT_ADD_( &b, a.a, a.alpha ); }
- /* mat_add = mat1 + mat_scaled2 */
- inline _CvMAT_ADD_ operator + ( const CvMAT& b, const _CvMAT_SCALE_& a )
- { return _CvMAT_ADD_( &b, a.a, a.alpha ); }
- /* -mat_add */
- inline _CvMAT_ADD_EX_ operator - ( const _CvMAT_ADD_& a )
- { return _CvMAT_ADD_EX_( a.a, -1, a.b, -a.beta ); }
- /* mat_add = mat_scaled1 - mat2 */
- inline _CvMAT_ADD_EX_ operator - ( const _CvMAT_SCALE_& a, const CvMAT& b )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, &b, -1 ); }
- /* mat_add = mat1 - mat_scaled2 */
- inline _CvMAT_ADD_ operator - ( const CvMAT& b, const _CvMAT_SCALE_& a )
- { return _CvMAT_ADD_( &b, a.a, -a.alpha ); }
- /* mat_add = mat_scaled_shifted1 + mat2 */
- inline _CvMAT_ADD_EX_ operator + ( const _CvMAT_SCALE_SHIFT_& a, const CvMAT& b )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, &b, 1, a.beta ); }
- /* mat_add = mat1 + mat_scaled_shifted2 */
- inline _CvMAT_ADD_EX_ operator + ( const CvMAT& b, const _CvMAT_SCALE_SHIFT_& a )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, &b, 1, a.beta ); }
- /* mat_add = mat_scaled_shifted1 - mat2 */
- inline _CvMAT_ADD_EX_ operator - ( const _CvMAT_SCALE_SHIFT_& a, const CvMAT& b )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, &b, -1, a.beta ); }
- /* mat_add = mat1 - mat_scaled_shifted2 */
- inline _CvMAT_ADD_EX_ operator - ( const CvMAT& b, const _CvMAT_SCALE_SHIFT_& a )
- { return _CvMAT_ADD_EX_( a.a, -a.alpha, &b, 1, -a.beta ); }
- /* mat_add = mat_scaled_shifted1 + mat_scaled2 */
- inline _CvMAT_ADD_EX_ operator + ( const _CvMAT_SCALE_SHIFT_& a, const _CvMAT_SCALE_& b )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, b.a, b.alpha, a.beta ); }
- /* mat_add = mat_scaled1 + mat_scaled_shifted2 */
- inline _CvMAT_ADD_EX_ operator + ( const _CvMAT_SCALE_& b, const _CvMAT_SCALE_SHIFT_& a )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, b.a, b.alpha, a.beta ); }
- /* mat_add = mat_scaled_shifted1 - mat_scaled2 */
- inline _CvMAT_ADD_EX_ operator - ( const _CvMAT_SCALE_SHIFT_& a, const _CvMAT_SCALE_& b )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, b.a, -b.alpha, a.beta ); }
- /* mat_add = mat_scaled1 - mat_scaled_shifted2 */
- inline _CvMAT_ADD_EX_ operator - ( const _CvMAT_SCALE_& b, const _CvMAT_SCALE_SHIFT_& a )
- { return _CvMAT_ADD_EX_( a.a, -a.alpha, b.a, b.alpha, -a.beta ); }
- /* mat_add = mat_scaled1 + mat_scaled2 */
- inline _CvMAT_ADD_EX_ operator + ( const _CvMAT_SCALE_& a, const _CvMAT_SCALE_& b )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, b.a, b.alpha ); }
- /* mat_add = mat_scaled1 - mat_scaled2 */
- inline _CvMAT_ADD_EX_ operator - ( const _CvMAT_SCALE_& a, const _CvMAT_SCALE_& b )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, b.a, -b.alpha ); }
- /* mat_add = mat_scaled_shifted1 + mat_scaled_shifted2 */
- inline _CvMAT_ADD_EX_ operator + ( const _CvMAT_SCALE_SHIFT_& a,
- const _CvMAT_SCALE_SHIFT_& b )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, b.a, b.alpha, a.beta + b.beta ); }
- /* mat_add = mat_scaled_shifted1 - mat_scaled_shifted2 */
- inline _CvMAT_ADD_EX_ operator - ( const _CvMAT_SCALE_SHIFT_& a,
- const _CvMAT_SCALE_SHIFT_& b )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, b.a, -b.alpha, a.beta - b.beta ); }
- /* mat_add2 = mat_add1 + scalar */
- inline _CvMAT_ADD_EX_ operator + ( const _CvMAT_ADD_EX_& a, double gamma )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, a.b, a.beta, a.gamma + gamma ); }
- /* mat_add2 = scalar + mat_add1 */
- inline _CvMAT_ADD_EX_ operator + ( double gamma, const _CvMAT_ADD_EX_& a )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, a.b, a.beta, a.gamma + gamma ); }
- /* mat_add2 = mat_add1 - scalar */
- inline _CvMAT_ADD_EX_ operator - ( const _CvMAT_ADD_EX_& a, double gamma )
- { return _CvMAT_ADD_EX_( a.a, a.alpha, a.b, a.beta, a.gamma - gamma ); }
- /* mat_add2 = scalar - mat_add1 */
- inline _CvMAT_ADD_EX_ operator - ( double gamma, const _CvMAT_ADD_EX_& a )
- { return _CvMAT_ADD_EX_( a.a, -a.alpha, a.b, -a.beta, gamma - a.gamma ); }
- /* mat_add2 = mat_add1 * scalar */
- inline _CvMAT_ADD_EX_ operator * ( const _CvMAT_ADD_EX_& a, double alpha )
- { return _CvMAT_ADD_EX_( a.a, a.alpha*alpha, a.b, a.beta*alpha, a.gamma*alpha ); }
- /* mat_add2 = scalar * mat_add1 */
- inline _CvMAT_ADD_EX_ operator * ( double alpha, const _CvMAT_ADD_EX_& a )
- { return _CvMAT_ADD_EX_( a.a, a.alpha*alpha, a.b, a.beta*alpha, a.gamma*alpha ); }
- /* mat_add2 = mat_add1 + scalar */
- inline _CvMAT_ADD_EX_ operator + ( const _CvMAT_ADD_& a, double gamma )
- { return _CvMAT_ADD_EX_( a.a, 1, a.b, a.beta, gamma ); }
- /* mat_add2 = scalar + mat_add1 */
- inline _CvMAT_ADD_EX_ operator + ( double gamma, const _CvMAT_ADD_& a )
- { return _CvMAT_ADD_EX_( a.a, 1, a.b, a.beta, gamma ); }
- /* mat_add2 = mat_add1 - scalar */
- inline _CvMAT_ADD_EX_ operator - ( const _CvMAT_ADD_& a, double gamma )
- { return _CvMAT_ADD_EX_( a.a, 1, a.b, a.beta, -gamma ); }
- /* mat_add2 = scalar - mat_add1 */
- inline _CvMAT_ADD_EX_ operator - ( double gamma, const _CvMAT_ADD_& a )
- { return _CvMAT_ADD_EX_( a.a, -1, a.b, -a.beta, gamma ); }
- /* mat_add2 = mat_add1 * scalar */
- inline _CvMAT_ADD_EX_ operator * ( const _CvMAT_ADD_& a, double alpha )
- { return _CvMAT_ADD_EX_( a.a, alpha, a.b, a.beta*alpha, 0 ); }
- /* mat_add2 = scalar * mat_add1 */
- inline _CvMAT_ADD_EX_ operator * ( double alpha, const _CvMAT_ADD_& a )
- { return _CvMAT_ADD_EX_( a.a, alpha, a.b, a.beta*alpha, 0 ); }
- /* -mat_add_ex */
- inline _CvMAT_ADD_EX_ operator - ( const _CvMAT_ADD_EX_& a )
- { return _CvMAT_ADD_EX_( a.a, -a.alpha, a.b, -a.beta, -a.gamma ); }
- /*
- * PART II. Matrix multiplication.
- */
- /* mmul = mat1 * mat2 */
- inline _CvMAT_MUL_ operator * ( const CvMAT& a, const CvMAT& b )
- { return _CvMAT_MUL_( &a, &b, 0 ); }
- /* mmul = (mat1^t) * mat2 */
- inline _CvMAT_MUL_ operator * ( const _CvMAT_T_& a, const CvMAT& b )
- { return _CvMAT_MUL_( &a.a, &b, a.alpha, 1 ); }
- /* mmul = mat1 * (mat2^t) */
- inline _CvMAT_MUL_ operator * ( const CvMAT& b, const _CvMAT_T_& a )
- { return _CvMAT_MUL_( &b, &a.a, a.alpha, 2 ); }
- /* mmul = (mat1^t) * (mat2^t) */
- inline _CvMAT_MUL_ operator * ( const _CvMAT_T_& a, const _CvMAT_T_& b )
- { return _CvMAT_MUL_( &a.a, &b.a, a.alpha*b.alpha, 3 ); }
- /* mmul = mat_scaled1 * mat2 */
- inline _CvMAT_MUL_ operator * ( const _CvMAT_SCALE_& a, const CvMAT& b )
- { return _CvMAT_MUL_( a.a, &b, a.alpha, 0 ); }
- /* mmul = mat1 * mat_scaled2 */
- inline _CvMAT_MUL_ operator * ( const CvMAT& b, const _CvMAT_SCALE_& a )
- { return _CvMAT_MUL_( &b, a.a, a.alpha, 0 ); }
- /* mmul = (mat1^t) * mat_scaled1 */
- inline _CvMAT_MUL_ operator * ( const _CvMAT_T_& a, const _CvMAT_SCALE_& b )
- { return _CvMAT_MUL_( &a.a, b.a, a.alpha*b.alpha, 1 ); }
- /* mmul = mat_scaled1 * (mat2^t) */
- inline _CvMAT_MUL_ operator * ( const _CvMAT_SCALE_& b, const _CvMAT_T_& a )
- { return _CvMAT_MUL_( b.a, &a.a, a.alpha*b.alpha, 2 ); }
- /* mmul = mat_scaled1 * mat_scaled2 */
- inline _CvMAT_MUL_ operator * ( const _CvMAT_SCALE_& a, const _CvMAT_SCALE_& b )
- { return _CvMAT_MUL_( a.a, b.a, a.alpha*b.alpha, 0 ); }
- /* mmul2 = mmul1 * scalar */
- inline _CvMAT_MUL_ operator * ( const _CvMAT_MUL_& a, double alpha )
- { return _CvMAT_MUL_( a.a, a.b, a.alpha*alpha, a.t_ab ); }
- /* mmul2 = scalar * mmul1 */
- inline _CvMAT_MUL_ operator * ( double alpha, const _CvMAT_MUL_& a )
- { return _CvMAT_MUL_( a.a, a.b, a.alpha*alpha, a.t_ab ); }
- /* -mmul */
- inline _CvMAT_MUL_ operator - ( const _CvMAT_MUL_& a )
- { return _CvMAT_MUL_( a.a, a.b, -a.alpha, a.t_ab ); }
- /* mmuladd = mmul + mat */
- inline _CvMAT_MUL_ADD_ operator + ( const _CvMAT_MUL_& a, const CvMAT& b )
- { return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, &b, 1, a.t_ab ); }
- /* !!! Comment this off because of ambigous conversion error !!!
- mmuladd = mat + mmul */
- /* inline _CvMAT_MUL_ADD_ operator + ( const CvMAT& b, const _CvMAT_MUL_& a )
- { return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, &b, 1, a.t_ab ); }*/
- /* mmuladd = mmul - mat */
- inline _CvMAT_MUL_ADD_ operator - ( const _CvMAT_MUL_& a, const CvMAT& b )
- { return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, &b, -1, a.t_ab ); }
- /* !!! Comment this off because of ambigous conversion error !!!
- mmuladd = mat - mmul */
- /*inline _CvMAT_MUL_ADD_ operator - ( const CvMAT& b, const _CvMAT_MUL_& a )
- { return _CvMAT_MUL_ADD_( a.a, a.b, -a.alpha, &b, 1, a.t_ab ); }*/
- /* mmuladd = mmul + mat_scaled */
- inline _CvMAT_MUL_ADD_ operator + ( const _CvMAT_MUL_& a, const _CvMAT_SCALE_& b )
- { return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, b.a, b.alpha, a.t_ab ); }
- /* mmuladd = mat_scaled + mmul */
- inline _CvMAT_MUL_ADD_ operator + ( const _CvMAT_SCALE_& b, const _CvMAT_MUL_& a )
- { return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, b.a, b.alpha, a.t_ab ); }
- /* mmuladd = mmul - mat_scaled */
- inline _CvMAT_MUL_ADD_ operator - ( const _CvMAT_MUL_& a, const _CvMAT_SCALE_& b )
- { return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, b.a, -b.alpha, a.t_ab ); }
- /* mmuladd = mat_scaled - mmul */
- inline _CvMAT_MUL_ADD_ operator - ( const _CvMAT_SCALE_& b, const _CvMAT_MUL_& a )
- { return _CvMAT_MUL_ADD_( a.a, a.b, -a.alpha, b.a, b.alpha, a.t_ab ); }
- /* mmuladd = mmul + (mat^t) */
- inline _CvMAT_MUL_ADD_ operator + ( const _CvMAT_MUL_& a, const _CvMAT_T_& b )
- { return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, &b.a, b.alpha, a.t_ab + 4 ); }
- /* mmuladd = (mat^t) + mmul */
- inline _CvMAT_MUL_ADD_ operator + ( const _CvMAT_T_& b, const _CvMAT_MUL_& a )
- { return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, &b.a, b.alpha, a.t_ab + 4 ); }
- /* mmuladd = mmul - (mat^t) */
- inline _CvMAT_MUL_ADD_ operator - ( const _CvMAT_MUL_& a, const _CvMAT_T_& b )
- { return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha, &b.a, -b.alpha, a.t_ab + 4 ); }
- /* mmuladd = (mat^t) - mmul */
- inline _CvMAT_MUL_ADD_ operator - ( const _CvMAT_T_& b, const _CvMAT_MUL_& a )
- { return _CvMAT_MUL_ADD_( a.a, a.b, -a.alpha, &b.a, b.alpha, a.t_ab + 4 ); }
- /* mmuladd = mat_scaled_shited * mat */
- inline _CvMAT_MUL_ADD_ operator * ( const _CvMAT_SCALE_SHIFT_& a, const CvMAT& b )
- { return _CvMAT_MUL_ADD_( a.a, &b, a.alpha, &b, a.beta, 0 ); }
- /* mmuladd = mat * mat_scaled_shited */
- inline _CvMAT_MUL_ADD_ operator * ( const CvMAT& b, const _CvMAT_SCALE_SHIFT_& a )
- { return _CvMAT_MUL_ADD_( &b, a.a, a.alpha, &b, a.beta, 0 ); }
- /* mmuladd = mat_scaled_shited * mat_scaled */
- inline _CvMAT_MUL_ADD_ operator * ( const _CvMAT_SCALE_SHIFT_& a, const _CvMAT_SCALE_& b )
- { return _CvMAT_MUL_ADD_( a.a, b.a, a.alpha*b.alpha, b.a, a.beta*b.alpha, 0 ); }
- /* mmuladd = mat_scaled * mat_scaled_shited */
- inline _CvMAT_MUL_ADD_ operator * ( const _CvMAT_SCALE_& b, const _CvMAT_SCALE_SHIFT_& a )
- { return _CvMAT_MUL_ADD_( b.a, a.a, a.alpha*b.alpha, b.a, a.beta*b.alpha, 0 ); }
- /* mmuladd = mat_scaled_shited * (mat^t) */
- inline _CvMAT_MUL_ADD_ operator * ( const _CvMAT_SCALE_SHIFT_& a, const _CvMAT_T_& b )
- { return _CvMAT_MUL_ADD_( a.a, &b.a, a.alpha*b.alpha, &b.a, a.beta*b.alpha, 6 ); }
- /* mmuladd = (mat^t) * mat_scaled_shited */
- inline _CvMAT_MUL_ADD_ operator * ( const _CvMAT_T_& b, const _CvMAT_SCALE_SHIFT_& a )
- { return _CvMAT_MUL_ADD_( &b.a, a.a, a.alpha*b.alpha, &b.a, a.beta*b.alpha, 5 ); }
- /* mmuladd2 = mmuladd1 * scalar */
- inline _CvMAT_MUL_ADD_ operator * ( const _CvMAT_MUL_ADD_& a, double alpha )
- { return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha*alpha, a.c, a.beta*alpha, a.t_abc ); }
- /* mmuladd2 = scalar * mmuladd1 */
- inline _CvMAT_MUL_ADD_ operator * ( double alpha, const _CvMAT_MUL_ADD_& a )
- { return _CvMAT_MUL_ADD_( a.a, a.b, a.alpha*alpha, a.c, a.beta*alpha, a.t_abc ); }
- /* -mmuladd */
- inline _CvMAT_MUL_ADD_ operator - ( const _CvMAT_MUL_ADD_& a )
- { return _CvMAT_MUL_ADD_( a.a, a.b, -a.alpha, a.c, -a.beta, a.t_abc ); }
- /* inv(a)*b, i.e. solve a*x = b */
- inline _CvMAT_SOLVE_ operator * ( const _CvMAT_INV_& a, const CvMAT& b )
- { return _CvMAT_SOLVE_( &a.a, &b, a.method ); }
- /*
- * PART III. Logical operations
- */
- inline _CvMAT_NOT_ operator ~ ( const CvMAT& a )
- { return _CvMAT_NOT_(&a); }
- inline _CvMAT_LOGIC_ operator & ( const CvMAT& a, const CvMAT& b )
- { return _CvMAT_LOGIC_( &a, &b, _CvMAT_LOGIC_::AND, 0 ); }
- inline _CvMAT_LOGIC_ operator & ( const _CvMAT_NOT_& a, const CvMAT& b )
- { return _CvMAT_LOGIC_( a.a, &b, _CvMAT_LOGIC_::AND, 1 ); }
- inline _CvMAT_LOGIC_ operator & ( const CvMAT& a, const _CvMAT_NOT_& b )
- { return _CvMAT_LOGIC_( &a, b.a, _CvMAT_LOGIC_::AND, 2 ); }
- inline _CvMAT_LOGIC_ operator & ( const _CvMAT_NOT_& a, const _CvMAT_NOT_& b )
- { return _CvMAT_LOGIC_( a.a, b.a, _CvMAT_LOGIC_::AND, 3 ); }
- inline _CvMAT_LOGIC_ operator | ( const CvMAT& a, const CvMAT& b )
- { return _CvMAT_LOGIC_( &a, &b, _CvMAT_LOGIC_::OR, 0 ); }
- inline _CvMAT_LOGIC_ operator | ( const _CvMAT_NOT_& a, const CvMAT& b )
- { return _CvMAT_LOGIC_( a.a, &b, _CvMAT_LOGIC_::OR, 1 ); }
- inline _CvMAT_LOGIC_ operator | ( const CvMAT& a, const _CvMAT_NOT_& b )
- { return _CvMAT_LOGIC_( &a, b.a, _CvMAT_LOGIC_::OR, 2 ); }
- inline _CvMAT_LOGIC_ operator | ( const _CvMAT_NOT_& a, const _CvMAT_NOT_& b )
- { return _CvMAT_LOGIC_( a.a, b.a, _CvMAT_LOGIC_::OR, 3 ); }
- inline _CvMAT_LOGIC_ operator ^ ( const CvMAT& a, const CvMAT& b )
- { return _CvMAT_LOGIC_( &a, &b, _CvMAT_LOGIC_::XOR, 0 ); }
- inline _CvMAT_LOGIC_ operator ^ ( const _CvMAT_NOT_& a, const CvMAT& b )
- { return _CvMAT_LOGIC_( a.a, &b, _CvMAT_LOGIC_::XOR, 1 ); }
- inline _CvMAT_LOGIC_ operator ^ ( const CvMAT& a, const _CvMAT_NOT_& b )
- { return _CvMAT_LOGIC_( &a, b.a, _CvMAT_LOGIC_::XOR, 2 ); }
- inline _CvMAT_LOGIC_ operator ^ ( const _CvMAT_NOT_& a, const _CvMAT_NOT_& b )
- { return _CvMAT_LOGIC_( a.a, b.a, _CvMAT_LOGIC_::XOR, 3 ); }
- inline _CvMAT_UN_LOGIC_ operator & ( const CvMAT& a, double alpha )
- { return _CvMAT_UN_LOGIC_( &a, alpha, _CvMAT_LOGIC_::AND, 0 ); }
- inline _CvMAT_UN_LOGIC_ operator & ( double alpha, const CvMAT& a )
- { return _CvMAT_UN_LOGIC_( &a, alpha, _CvMAT_LOGIC_::AND, 0 ); }
- inline _CvMAT_UN_LOGIC_ operator & ( const _CvMAT_NOT_& a, double alpha )
- { return _CvMAT_UN_LOGIC_( a.a, alpha, _CvMAT_LOGIC_::AND, 1 ); }
- inline _CvMAT_UN_LOGIC_ operator & ( double alpha, const _CvMAT_NOT_& a )
- { return _CvMAT_UN_LOGIC_( a.a, alpha, _CvMAT_LOGIC_::AND, 1 ); }
- inline _CvMAT_UN_LOGIC_ operator | ( const CvMAT& a, double alpha )
- { return _CvMAT_UN_LOGIC_( &a, alpha, _CvMAT_LOGIC_::OR, 0 ); }
- inline _CvMAT_UN_LOGIC_ operator | ( double alpha, const CvMAT& a )
- { return _CvMAT_UN_LOGIC_( &a, alpha, _CvMAT_LOGIC_::OR, 0 ); }
- inline _CvMAT_UN_LOGIC_ operator | ( const _CvMAT_NOT_& a, double alpha )
- { return _CvMAT_UN_LOGIC_( a.a, alpha, _CvMAT_LOGIC_::OR, 1 ); }
- inline _CvMAT_UN_LOGIC_ operator | ( double alpha, const _CvMAT_NOT_& a )
- { return _CvMAT_UN_LOGIC_( a.a, alpha, _CvMAT_LOGIC_::OR, 1 ); }
- inline _CvMAT_UN_LOGIC_ operator ^ ( const CvMAT& a, double alpha )
- { return _CvMAT_UN_LOGIC_( &a, alpha, _CvMAT_LOGIC_::XOR, 0 ); }
- inline _CvMAT_UN_LOGIC_ operator ^ ( double alpha, const CvMAT& a )
- { return _CvMAT_UN_LOGIC_( &a, alpha, _CvMAT_LOGIC_::XOR, 0 ); }
- inline _CvMAT_UN_LOGIC_ operator ^ ( const _CvMAT_NOT_& a, double alpha )
- { return _CvMAT_UN_LOGIC_( a.a, alpha, _CvMAT_LOGIC_::XOR, 1 ); }
- inline _CvMAT_UN_LOGIC_ operator ^ ( double alpha, const _CvMAT_NOT_& a )
- { return _CvMAT_UN_LOGIC_( a.a, alpha, _CvMAT_LOGIC_::XOR, 1 ); }
- /*
- * PART IV. Comparison operations
- */
- inline _CvMAT_CMP_ operator > ( const CvMAT& a, const CvMAT& b )
- { return _CvMAT_CMP_( &a, &b, CV_CMP_GT ); }
- inline _CvMAT_CMP_ operator >= ( const CvMAT& a, const CvMAT& b )
- { return _CvMAT_CMP_( &a, &b, CV_CMP_GE ); }
- inline _CvMAT_CMP_ operator < ( const CvMAT& a, const CvMAT& b )
- { return _CvMAT_CMP_( &a, &b, CV_CMP_LT ); }
- inline _CvMAT_CMP_ operator <= ( const CvMAT& a, const CvMAT& b )
- { return _CvMAT_CMP_( &a, &b, CV_CMP_LE ); }
- inline _CvMAT_CMP_ operator == ( const CvMAT& a, const CvMAT& b )
- { return _CvMAT_CMP_( &a, &b, CV_CMP_EQ ); }
- inline _CvMAT_CMP_ operator != ( const CvMAT& a, const CvMAT& b )
- { return _CvMAT_CMP_( &a, &b, CV_CMP_NE ); }
- inline _CvMAT_CMP_ operator > ( const CvMAT& a, double alpha )
- { return _CvMAT_CMP_( &a, alpha, CV_CMP_GT ); }
- inline _CvMAT_CMP_ operator > ( double alpha, const CvMAT& a )
- { return _CvMAT_CMP_( &a, alpha, CV_CMP_LT ); }
- inline _CvMAT_CMP_ operator >= ( const CvMAT& a, double alpha )
- { return _CvMAT_CMP_( &a, alpha, CV_CMP_GE ); }
- inline _CvMAT_CMP_ operator >= ( double alpha, const CvMAT& a )
- { return _CvMAT_CMP_( &a, alpha, CV_CMP_LE ); }
- inline _CvMAT_CMP_ operator < ( const CvMAT& a, double alpha )
- { return _CvMAT_CMP_( &a, alpha, CV_CMP_LT ); }
- inline _CvMAT_CMP_ operator < ( double alpha, const CvMAT& a )
- { return _CvMAT_CMP_( &a, alpha, CV_CMP_GT ); }
- inline _CvMAT_CMP_ operator <= ( const CvMAT& a, double alpha )
- { return _CvMAT_CMP_( &a, alpha, CV_CMP_LE ); }
- inline _CvMAT_CMP_ operator <= ( double alpha, const CvMAT& a )
- { return _CvMAT_CMP_( &a, alpha, CV_CMP_GE ); }
- inline _CvMAT_CMP_ operator == ( const CvMAT& a, double alpha )
- { return _CvMAT_CMP_( &a, alpha, CV_CMP_EQ ); }
- inline _CvMAT_CMP_ operator == ( double alpha, const CvMAT& a )
- { return _CvMAT_CMP_( &a, alpha, CV_CMP_EQ ); }
- inline _CvMAT_CMP_ operator != ( const CvMAT& a, double alpha )
- { return _CvMAT_CMP_( &a, alpha, CV_CMP_NE ); }
- inline _CvMAT_CMP_ operator != ( double alpha, const CvMAT& a )
- { return _CvMAT_CMP_( &a, alpha, CV_CMP_NE ); }
- /*
- * PART V. Speedup for some augmented assignments to CvMAT
- */
- inline CvMAT& CvMAT::operator += ( const _CvMAT_SCALE_& scale_mat )
- { return (*this = *this + scale_mat); }
- inline CvMAT& CvMAT::operator += ( const _CvMAT_SCALE_SHIFT_& scale_mat )
- { return (*this = *this + scale_mat); }
- inline CvMAT& CvMAT::operator += ( const _CvMAT_MUL_& mmul )
- { return (*this = mmul + *this); }
- inline CvMAT& CvMAT::operator -= ( const _CvMAT_SCALE_& scale_mat )
- { return (*this = *this - scale_mat); }
- inline CvMAT& CvMAT::operator -= ( const _CvMAT_SCALE_SHIFT_& scale_mat )
- { return (*this = *this - scale_mat); }
- inline CvMAT& CvMAT::operator -= ( const _CvMAT_MUL_& mmul )
- { return (*this = -mmul + *this); }
- inline CvMAT& CvMAT::operator *= ( const _CvMAT_SCALE_& scale_mat )
- { return (*this = *this * scale_mat); }
- inline CvMAT& CvMAT::operator *= ( const _CvMAT_SCALE_SHIFT_& scale_mat )
- { return (*this = *this * scale_mat); }
- /****************************************************************************************\
- * misc. operations on temporary matrices (+,-,*) *
- \****************************************************************************************/
- /*
- * the base proxy class implementation
- */
- /* a.*b */
- inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::mul( const CvMAT& a ) const
- { return ((CvMAT)*this).mul(a); }
- /* a.*b*alpha */
- inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::mul( const _CvMAT_SCALE_& a ) const
- { return ((CvMAT)*this).mul(a); }
- /* a./b */
- inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::div( const CvMAT& a ) const
- { return ((CvMAT)*this).div(a); }
- /* a./(b*alpha) */
- inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::div( const _CvMAT_SCALE_& a ) const
- { return ((CvMAT)*this).div(a); }
- /* a.max(b) */
- inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::min( const CvMAT& a ) const
- { return ((CvMAT)*this).min(a); }
- /* a.min(b) */
- inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::max( const CvMAT& a ) const
- { return ((CvMAT)*this).max(a); }
- /* a.max(alpha) */
- inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::min( double alpha ) const
- { return ((CvMAT)*this).min(alpha); }
- /* a.min(alpha) */
- inline _CvMAT_DOT_OP_ _CvMAT_BASE_OP_::max( double alpha ) const
- { return ((CvMAT)*this).max(alpha); }
- inline _CvMAT_INV_ _CvMAT_BASE_OP_::inv( int method ) const
- { return ((CvMAT)*this).inv(method); }
- inline _CvMAT_T_ _CvMAT_BASE_OP_::t() const
- { return ((CvMAT)*this).t(); }
- inline _CvMAT_CVT_ _CvMAT_BASE_OP_::cvt( int newdepth, double scale, double shift ) const
- { return ((CvMAT)*this).cvt( newdepth, scale, shift ); }
- inline CvMAT _CvMAT_BASE_OP_::row( int r ) const
- { return CvMAT((CvMAT)*this, 0, r ); }
- inline CvMAT _CvMAT_BASE_OP_::rowrange( int row1, int row2 ) const
- {
- CvMAT m = (CvMAT)*this;
- assert( 0 <= row1 && row1 < row2 && row2 <= m.height );
- return CvMAT( m, cvRect( 0, row1, m.width, row2 - row1 ));
- }
- inline CvMAT _CvMAT_BASE_OP_::col( int c ) const
- { return CvMAT( (CvMAT)*this, 1, c ); }
- inline CvMAT _CvMAT_BASE_OP_::colrange( int col1, int col2 ) const
- {
- CvMAT m = (CvMAT)*this;
- assert( 0 <= col1 && col1 < col2 && col2 <= m.width );
- return CvMAT( m, cvRect( col1, 0, col2 - col1, m.height ));
- }
- inline CvMAT _CvMAT_BASE_OP_::rect( CvRect r ) const
- { return CvMAT( (CvMAT)*this, r ); }
- inline CvMAT _CvMAT_BASE_OP_::diag( int d ) const
- { return CvMAT( (CvMAT)*this, -1, d ); }
- inline double _CvMAT_BASE_OP_::det() const
- { return ((CvMAT)*this).det(); }
- inline double _CvMAT_BASE_OP_::norm( int norm_type ) const
- { return ((CvMAT)*this).norm( norm_type ); }
- inline CvScalar _CvMAT_BASE_OP_::sum() const
- { return ((CvMAT)*this).sum(); }
- inline double _CvMAT_BASE_OP_::min( CvPoint* minloc ) const
- { return ((CvMAT)*this).min( minloc ); }
- inline double _CvMAT_BASE_OP_::max( CvPoint* maxloc ) const
- { return ((CvMAT)*this).max( maxloc ); }
- /****************************************************************************************/
- /* proxy classes implementation. */
- /* part I. constructors */
- /****************************************************************************************/
- /* constructors */
- inline _CvMAT_COPY_::_CvMAT_COPY_( const CvMAT* _a ) : a((CvMAT*)_a) {}
- inline _CvMAT_CVT_::_CvMAT_CVT_( const CvMAT* _a, int _newdepth,
- double _scale, double _shift ) :
- a(*(CvMAT*)_a), newdepth(_newdepth), scale(_scale), shift(_shift) {}
- inline _CvMAT_T_::_CvMAT_T_( const CvMAT* _a ) : a(*(CvMAT*)_a), alpha(1) {}
- inline _CvMAT_T_::_CvMAT_T_( const CvMAT* _a, double _alpha ) :
- a(*(CvMAT*)_a), alpha(_alpha) {}
- inline _CvMAT_INV_::_CvMAT_INV_( const CvMAT* _a, int _method ) :
- a(*(CvMAT*)_a), method(_method) {}
- inline _CvMAT_MUL_::_CvMAT_MUL_( const CvMAT* _a, const CvMAT* _b, int _t_ab ) :
- a((CvMAT*)_a), b((CvMAT*)_b), alpha(1), t_ab(_t_ab) {}
- inline _CvMAT_MUL_::_CvMAT_MUL_( const CvMAT* _a, const CvMAT* _b,
- double _alpha, int _t_ab ) :
- a((CvMAT*)_a), b((CvMAT*)_b), alpha(_alpha), t_ab(_t_ab) {}
- inline _CvMAT_MUL_ADD_::_CvMAT_MUL_ADD_( const CvMAT* _a, const CvMAT* _b,
- const CvMAT* _c, int _t_abc ) :
- a((CvMAT*)_a), b((CvMAT*)_b), c((CvMAT*)_c), t_abc(_t_abc) {}
- inline _CvMAT_MUL_ADD_::_CvMAT_MUL_ADD_( const CvMAT* _a, const CvMAT* _b, double _alpha,
- const CvMAT* _c, double _beta, int _t_abc ) :
- a((CvMAT*)_a), b((CvMAT*)_b), alpha(_alpha),
- c((CvMAT*)_c), beta(_beta), t_abc(_t_abc) {}
- inline _CvMAT_ADD_::_CvMAT_ADD_( const CvMAT* _a, const CvMAT* _b, double _beta ) :
- a((CvMAT*)_a), b((CvMAT*)_b), beta(_beta) {}
- inline _CvMAT_ADD_EX_::_CvMAT_ADD_EX_( const CvMAT* _a, double _alpha,
- const CvMAT* _b, double _beta, double _gamma ) :
- a((CvMAT*)_a), alpha(_alpha), b((CvMAT*)_b), beta(_beta), gamma(_gamma) {}
- inline _CvMAT_SCALE_::_CvMAT_SCALE_( const CvMAT* _a, double _alpha ) :
- a((CvMAT*)_a), alpha(_alpha) {}
- inline _CvMAT_SCALE_SHIFT_::_CvMAT_SCALE_SHIFT_( const CvMAT* _a,
- double _alpha, double _beta ) :
- a((CvMAT*)_a), alpha(_alpha), beta(_beta) {}
- inline _CvMAT_LOGIC_::_CvMAT_LOGIC_( const CvMAT* _a, const CvMAT* _b,
- _CvMAT_LOGIC_::Op _op, int _flags ) :
- a((CvMAT*)_a), b((CvMAT*)_b), op(_op), flags(_flags) {}
- inline _CvMAT_UN_LOGIC_::_CvMAT_UN_LOGIC_( const CvMAT* _a, double _alpha,
- _CvMAT_LOGIC_::Op _op, int _flags ) :
- a((CvMAT*)_a), alpha(_alpha), op(_op), flags(_flags) {}
- inline _CvMAT_NOT_::_CvMAT_NOT_( const CvMAT* _a ) :
- a((CvMAT*)_a) {}
- inline _CvMAT_DOT_OP_::_CvMAT_DOT_OP_( const CvMAT* _a, const CvMAT* _b,
- int _op, double _alpha ) :
- a(*_a), b((CvMAT*)_b), op(_op), alpha(_alpha) {}
- inline _CvMAT_SOLVE_::_CvMAT_SOLVE_( const CvMAT* _a, const CvMAT* _b, int _method ) :
- a((CvMAT*)_a), b((CvMAT*)_b), method(_method) {}
- inline _CvMAT_CMP_::_CvMAT_CMP_( const CvMAT* _a, const CvMAT* _b, int _cmp_op ) :
- a((CvMAT*)_a), b((CvMAT*)_b), alpha(0), cmp_op(_cmp_op) {}
- inline _CvMAT_CMP_::_CvMAT_CMP_( const CvMAT* _a, double _alpha, int _cmp_op ) :
- a((CvMAT*)_a), b(0), alpha(_alpha), cmp_op(_cmp_op) {}
- /****************************************************************************************/
- /* proxy classes implementation. */
- /* part II. conversion to CvMAT */
- /****************************************************************************************/
- inline _CvMAT_T_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_INV_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_MUL_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_SCALE_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_SCALE_SHIFT_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_ADD_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_ADD_EX_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_MUL_ADD_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_LOGIC_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_UN_LOGIC_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_NOT_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_DOT_OP_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_SOLVE_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_CMP_::operator CvMAT() const
- { return CvMAT( *this ); }
- inline _CvMAT_CVT_::operator CvMAT() const
- { return CvMAT(*this); }
- inline _CvMAT_COPY_::operator CvMAT() const
- { return *a; }
- /****************************************************************************************/
- /* proxy classes implementation. */
- /* part III. custom overrided methods */
- /****************************************************************************************/
- inline _CvMAT_DOT_OP_ _CvMAT_SCALE_::mul( const CvMAT& mat ) const
- { return _CvMAT_DOT_OP_( a, &mat, '*', alpha ); }
- inline _CvMAT_DOT_OP_ _CvMAT_SCALE_::mul( const _CvMAT_SCALE_& mat ) const
- { return _CvMAT_DOT_OP_( a, mat.a, '*', alpha*mat.alpha ); }
- inline _CvMAT_DOT_OP_ _CvMAT_SCALE_::div( const CvMAT& mat ) const
- { return _CvMAT_DOT_OP_( a, &mat, '/', alpha ); }
- inline _CvMAT_DOT_OP_ _CvMAT_SCALE_::div( const _CvMAT_SCALE_& mat ) const
- { return _CvMAT_DOT_OP_( a, mat.a, '/', alpha/mat.alpha ); }
- inline _CvMAT_DOT_OP_ operator * ( const _CvMAT_DOT_OP_& dot_op, double alpha )
- { return _CvMAT_DOT_OP_( &dot_op.a, dot_op.b, dot_op.op, dot_op.alpha * alpha ); }
- inline _CvMAT_DOT_OP_ operator * ( double alpha, const _CvMAT_DOT_OP_& dot_op )
- { return _CvMAT_DOT_OP_( &dot_op.a, dot_op.b, dot_op.op, dot_op.alpha * alpha ); }
- inline _CvMAT_DOT_OP_ operator / ( double alpha, const CvMAT& mat )
- { return _CvMAT_DOT_OP_( &mat, 0, '/', alpha ); }
- inline _CvMAT_DOT_OP_ operator / ( double alpha, const _CvMAT_SCALE_& mat )
- { return _CvMAT_DOT_OP_( mat.a, 0, '/', alpha/mat.alpha ); }
- inline double _CvMAT_T_::det() const
- { return a.det(); }
- inline double _CvMAT_T_::norm( int norm_type ) const
- { return a.norm( norm_type ); }
- inline double _CvMAT_ADD_::norm( int norm_type ) const
- {
- if( beta == -1 )
- return cvNorm( a, b, norm_type );
- else
- return ((CvMAT)*this).norm( norm_type );
- }
- inline _CvMAT_DOT_OP_ _CvMAT_ADD_::abs() const
- {
- if( beta == -1 )
- return _CvMAT_DOT_OP_( a, b, 'a', 0 );
- else
- return ((CvMAT)*this).abs();
- }
- inline _CvMAT_DOT_OP_ _CvMAT_SCALE_SHIFT_::abs() const
- {
- if( alpha == 1 )
- return _CvMAT_DOT_OP_( a, 0, 'a', -beta );
- else
- return ((CvMAT)*this).abs();
- }
- #endif /* __cplusplus */
- #endif /*_CVMAT_HPP_*/
|