16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*M/////////////////////////////////////////////////////////////////////////////////////// 26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. 46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// By downloading, copying, installing or using the software you agree to this license. 66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// If you do not agree to this license, do not download, install, 76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// copy or use the software. 86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Intel License Agreement 116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// For Open Source Computer Vision Library 126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Copyright (C) 2000, Intel Corporation, all rights reserved. 146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Third party copyrights are property of their respective owners. 156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Redistribution and use in source and binary forms, with or without modification, 176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// are permitted provided that the following conditions are met: 186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * Redistribution's of source code must retain the above copyright notice, 206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// this list of conditions and the following disclaimer. 216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * Redistribution's in binary form must reproduce the above copyright notice, 236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// this list of conditions and the following disclaimer in the documentation 246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and/or other materials provided with the distribution. 256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// * The name of Intel Corporation may not be used to endorse or promote products 276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// derived from this software without specific prior written permission. 286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// This software is provided by the copyright holders and contributors "as is" and 306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// any express or implied warranties, including, but not limited to, the implied 316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// warranties of merchantability and fitness for a particular purpose are disclaimed. 326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// In no event shall the Intel Corporation or contributors be liable for any direct, 336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// indirect, incidental, special, exemplary, or consequential damages 346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// (including, but not limited to, procurement of substitute goods or services; 356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// loss of use, data, or profits; or business interruption) however caused 366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and on any theory of liability, whether in contract, strict liability, 376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// or tort (including negligence or otherwise) arising in any way out of 386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// the use of this software, even if advised of the possibility of such damage. 396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// 406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//M*/ 416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifndef _CXCORE_HPP_ 446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define _CXCORE_HPP_ 456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvImage 476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvImage() : image(0), refcount(0) {} 506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvImage( CvSize size, int depth, int channels ) 516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn image = cvCreateImage( size, depth, channels ); 536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn refcount = image ? new int(1) : 0; 546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvImage( IplImage* img ) : image(img) 576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn refcount = image ? new int(1) : 0; 596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvImage( const CvImage& img ) : image(img.image), refcount(img.refcount) 626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( refcount ) ++(*refcount); 646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvImage( const char* filename, const char* imgname=0, int color=-1 ) : image(0), refcount(0) 676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { load( filename, imgname, color ); } 686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvImage( CvFileStorage* fs, const char* mapname, const char* imgname ) : image(0), refcount(0) 706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { read( fs, mapname, imgname ); } 716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvImage( CvFileStorage* fs, const char* seqname, int idx ) : image(0), refcount(0) 736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { read( fs, seqname, idx ); } 746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ~CvImage() 766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( refcount && !(--*refcount) ) 786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseImage( &image ); 806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn delete refcount; 816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvImage clone() { return CvImage(image ? cvCloneImage(image) : 0); } 856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void create( CvSize size, int depth, int channels ) 876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( !image || !refcount || 896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn image->width != size.width || image->height != size.height || 906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn image->depth != depth || image->nChannels != channels ) 916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn attach( cvCreateImage( size, depth, channels )); 926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void release() { detach(); } 956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void clear() { detach(); } 966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void attach( IplImage* img, bool use_refcount=true ) 986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( refcount && --*refcount == 0 ) 1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseImage( &image ); 1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn delete refcount; 1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn image = img; 1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn refcount = use_refcount && image ? new int(1) : 0; 1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void detach() 1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( refcount && --*refcount == 0 ) 1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseImage( &image ); 1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn delete refcount; 1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn image = 0; 1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn refcount = 0; 1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool load( const char* filename, const char* imgname=0, int color=-1 ); 1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool read( CvFileStorage* fs, const char* mapname, const char* imgname ); 1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool read( CvFileStorage* fs, const char* seqname, int idx ); 1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void save( const char* filename, const char* imgname ); 1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void write( CvFileStorage* fs, const char* imgname ); 1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void show( const char* window_name ); 1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool is_valid() { return image != 0; } 1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int width() const { return image ? image->width : 0; } 1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int height() const { return image ? image->height : 0; } 1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size() const { return image ? cvSize(image->width, image->height) : cvSize(0,0); } 1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize roi_size() const 1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return !image ? cvSize(0,0) : 1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn !image->roi ? cvSize(image->width,image->height) : 1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvSize(image->roi->width, image->roi->height); 1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvRect roi() const 1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return !image ? cvRect(0,0,0,0) : 1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn !image->roi ? cvRect(0,0,image->width,image->height) : 1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvRect(image->roi->xOffset,image->roi->yOffset, 1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn image->roi->width,image->roi->height); 1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int coi() const { return !image || !image->roi ? 0 : image->roi->coi; } 1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void set_roi(CvRect roi) { cvSetImageROI(image,roi); } 1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void reset_roi() { cvResetImageROI(image); } 1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void set_coi(int coi) { cvSetImageCOI(image,coi); } 1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int depth() const { return image ? image->depth : 0; } 1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int channels() const { return image ? image->nChannels : 0; } 1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int pix_size() const { return image ? ((image->depth & 255)>>3)*image->nChannels : 0; } 1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* data() { return image ? (uchar*)image->imageData : 0; } 1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const uchar* data() const { return image ? (const uchar*)image->imageData : 0; } 1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step() const { return image ? image->widthStep : 0; } 1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int origin() const { return image ? image->origin : 0; } 1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* roi_row(int y) 1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert(0<=y); 1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert(!image ? 1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1 : image->roi ? 1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn y<image->roi->height : y<image->height); 1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return !image ? 0 : 1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn !image->roi ? 1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (uchar*)(image->imageData + y*image->widthStep) : 1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (uchar*)(image->imageData + (y+image->roi->yOffset)*image->widthStep + 1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn image->roi->xOffset*((image->depth & 255)>>3)*image->nChannels); 1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const uchar* roi_row(int y) const 1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert(0<=y); 1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn assert(!image ? 1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1 : image->roi ? 1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn y<image->roi->height : y<image->height); 1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return !image ? 0 : 1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn !image->roi ? 1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (const uchar*)(image->imageData + y*image->widthStep) : 1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn (const uchar*)(image->imageData + (y+image->roi->yOffset)*image->widthStep + 1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn image->roi->xOffset*((image->depth & 255)>>3)*image->nChannels); 1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn operator const IplImage* () const { return image; } 1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn operator IplImage* () { return image; } 1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvImage& operator = (const CvImage& img) 1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( img.refcount ) 1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ++*img.refcount; 1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( refcount && !(--*refcount) ) 1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseImage( &image ); 1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn image=img.image; 2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn refcount=img.refcount; 2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return *this; 2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprotected: 2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn IplImage* image; 2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int* refcount; 2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennclass CV_EXPORTS CvMatrix 2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennpublic: 2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatrix() : matrix(0) {} 2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatrix( int rows, int cols, int type ) 2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { matrix = cvCreateMat( rows, cols, type ); } 2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatrix( int rows, int cols, int type, CvMat* hdr, 2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void* data=0, int step=CV_AUTOSTEP ) 2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { matrix = cvInitMatHeader( hdr, rows, cols, type, data, step ); } 2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatrix( int rows, int cols, int type, CvMemStorage* storage, bool alloc_data=true ); 2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatrix( int rows, int cols, int type, void* data, int step=CV_AUTOSTEP ) 2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { matrix = cvCreateMatHeader( rows, cols, type ); 2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvSetData( matrix, data, step ); } 2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatrix( CvMat* m ) 2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { matrix = m; } 2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatrix( const CvMatrix& m ) 2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn matrix = m.matrix; 2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn addref(); 2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatrix( const char* filename, const char* matname=0, int color=-1 ) : matrix(0) 2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { load( filename, matname, color ); } 2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatrix( CvFileStorage* fs, const char* mapname, const char* matname ) : matrix(0) 2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { read( fs, mapname, matname ); } 2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatrix( CvFileStorage* fs, const char* seqname, int idx ) : matrix(0) 2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { read( fs, seqname, idx ); } 2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ~CvMatrix() 2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn release(); 2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatrix clone() { return CvMatrix(matrix ? cvCloneMat(matrix) : 0); } 2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void set( CvMat* m, bool add_ref ) 2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn release(); 2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn matrix = m; 2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( add_ref ) 2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn addref(); 2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void create( int rows, int cols, int type ) 2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( !matrix || !matrix->refcount || 2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn matrix->rows != rows || matrix->cols != cols || 2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CV_MAT_TYPE(matrix->type) != type ) 2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn set( cvCreateMat( rows, cols, type ), false ); 2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void addref() const 2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( matrix ) 2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( matrix->hdr_refcount ) 2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ++matrix->hdr_refcount; 2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else if( matrix->refcount ) 2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ++*matrix->refcount; 2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void release() 2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( matrix ) 2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( matrix->hdr_refcount ) 2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( --matrix->hdr_refcount == 0 ) 2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvReleaseMat( &matrix ); 2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn else if( matrix->refcount ) 2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if( --*matrix->refcount == 0 ) 2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn cvFree( &matrix->refcount ); 2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn matrix = 0; 2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void clear() 2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn release(); 3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool load( const char* filename, const char* matname=0, int color=-1 ); 3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool read( CvFileStorage* fs, const char* mapname, const char* matname ); 3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool read( CvFileStorage* fs, const char* seqname, int idx ); 3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void save( const char* filename, const char* matname ); 3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void write( CvFileStorage* fs, const char* matname ); 3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void show( const char* window_name ); 3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bool is_valid() { return matrix != 0; } 3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int rows() const { return matrix ? matrix->rows : 0; } 3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int cols() const { return matrix ? matrix->cols : 0; } 3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvSize size() const 3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return !matrix ? cvSize(0,0) : cvSize(matrix->rows,matrix->cols); 3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int type() const { return matrix ? CV_MAT_TYPE(matrix->type) : 0; } 3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int depth() const { return matrix ? CV_MAT_DEPTH(matrix->type) : 0; } 3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int channels() const { return matrix ? CV_MAT_CN(matrix->type) : 0; } 3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int pix_size() const { return matrix ? CV_ELEM_SIZE(matrix->type) : 0; } 3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* data() { return matrix ? matrix->data.ptr : 0; } 3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const uchar* data() const { return matrix ? matrix->data.ptr : 0; } 3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int step() const { return matrix ? matrix->step : 0; } 3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void set_data( void* data, int step=CV_AUTOSTEP ) 3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { cvSetData( matrix, data, step ); } 3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn uchar* row(int i) { return !matrix ? 0 : matrix->data.ptr + i*matrix->step; } 3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn const uchar* row(int i) const 3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { return !matrix ? 0 : matrix->data.ptr + i*matrix->step; } 3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn operator const CvMat* () const { return matrix; } 3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn operator CvMat* () { return matrix; } 3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMatrix& operator = (const CvMatrix& _m) 3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn { 3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _m.addref(); 3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn release(); 3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn matrix = _m.matrix; 3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return *this; 3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennprotected: 3486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvMat* matrix; 3496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 3506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// classes for automatic module/RTTI data registration/unregistration 3536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CV_EXPORTS CvModule 3546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvModule( CvModuleInfo* _info ); 3566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ~CvModule(); 3576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvModuleInfo* info; 3586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn static CvModuleInfo* first; 3606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn static CvModuleInfo* last; 3616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 3626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstruct CV_EXPORTS CvType 3646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvType( const char* type_name, 3666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvIsInstanceFunc is_instance, CvReleaseFunc release=0, 3676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvReadFunc read=0, CvWriteFunc write=0, CvCloneFunc clone=0 ); 3686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ~CvType(); 3696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn CvTypeInfo* info; 3706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn static CvTypeInfo* first; 3726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn static CvTypeInfo* last; 3736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}; 3746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif /*_CXCORE_HPP_*/ 376