




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/* / CvMat, CvMatND, CvSparceMat and IplImage support functions/ (creation, deletion, copying, retrieving and setting elements etc.)/ */#include _cxcore.hstatic struct Cv_iplCreateImageHeader createHeader; Cv_iplAllocateImageData allocateData; Cv_iplDeallocate deallocate; Cv_iplCreateROI createROI; Cv_iplCloneImage cloneImage;CvIPL;/ Makes the library use native IPL image allocatorsCV_IMPL voidcvSetIPLAllocators( Cv_iplCreateImageHeader createHeader, Cv_iplAllocateImageData allocateData, Cv_iplDeallocate deallocate, Cv_iplCreateROI createROI, Cv_iplCloneImage cloneImage ) CV_FUNCNAME( cvSetIPLAllocators ); _BEGIN_; if( !createHeader | !allocateData | !deallocate | !createROI | !cloneImage ) if( createHeader | allocateData | deallocate | createROI | cloneImage ) CV_ERROR( CV_StsBadArg, Either all the pointers should be null or they all should be non-null ); CvIPL.createHeader = createHeader; CvIPL.allocateData = allocateData; CvIPL.deallocate = deallocate; CvIPL.createROI = createROI; CvIPL.cloneImage = cloneImage; _END_;/* CvMat creation and basic operations */ Creates CvMat and underlying dataCV_IMPL CvMat*cvCreateMat( int height, int width, int type ) CvMat* arr = 0; CV_FUNCNAME( cvCreateMat ); _BEGIN_; CV_CALL( arr = cvCreateMatHeader( height, width, type ); CV_CALL( cvCreateData( arr ); _END_; if( cvGetErrStatus() step*arr-rows INT_MAX ) arr-type &= CV_MAT_CONT_FLAG;/ Creates CvMat header onlyCV_IMPL CvMat*cvCreateMatHeader( int rows, int cols, int type ) CvMat* arr = 0; CV_FUNCNAME( cvCreateMatHeader ); _BEGIN_; int min_step; type = CV_MAT_TYPE(type); if( rows = 0 | cols = 0 ) CV_ERROR( CV_StsBadSize, Non-positive width or height ); min_step = CV_ELEM_SIZE(type)*cols; if( min_step step = rows = 1 ? 0 : cvAlign(min_step, CV_DEFAULT_MAT_ROW_ALIGN); arr-type = CV_MAT_MAGIC_VAL | type | (arr-step = 0 | arr-step = min_step ? CV_MAT_CONT_FLAG : 0); arr-rows = rows; arr-cols = cols; arr-data.ptr = 0; arr-refcount = 0; arr-hdr_refcount = 1; icvCheckHuge( arr ); _END_; if( cvGetErrStatus() CV_DEPTH_MAX ) CV_ERROR_FROM_CODE( CV_BadNumChannels ); if( rows = 0 | cols type = type | CV_MAT_MAGIC_VAL; arr-rows = rows; arr-cols = cols; arr-data.ptr = (uchar*)data; arr-refcount = 0; arr-hdr_refcount = 0; mask = (arr-rows cols*pix_size & mask; if( step != CV_AUTOSTEP & step != 0 ) if( step step = step & mask; else arr-step = min_step; arr-type = CV_MAT_MAGIC_VAL | type | (arr-step = min_step ? CV_MAT_CONT_FLAG : 0); icvCheckHuge( arr ); _END_; return arr;/ Deallocates the CvMat structure and underlying dataCV_IMPL voidcvReleaseMat( CvMat* array ) CV_FUNCNAME( cvReleaseMat ); _BEGIN_; if( !array ) CV_ERROR_FROM_CODE( CV_HeaderIsNull ); if( *array ) CvMat* arr = *array; if( !CV_IS_MAT_HDR(arr) & !CV_IS_MATND_HDR(arr) ) CV_ERROR_FROM_CODE( CV_StsBadFlag ); *array = 0; cvDecRefData( arr ); cvFree( &arr ); _END_;/ Creates a copy of matrixCV_IMPL CvMat*cvCloneMat( const CvMat* src ) CvMat* dst = 0; CV_FUNCNAME( cvCloneMat ); _BEGIN_; if( !CV_IS_MAT_HDR( src ) CV_ERROR( CV_StsBadArg, Bad CvMat header ); CV_CALL( dst = cvCreateMatHeader( src-rows, src-cols, src-type ); if( src-data.ptr ) CV_CALL( cvCreateData( dst ); CV_CALL( cvCopy( src, dst ); _END_; return dst;/* CvMatND creation and basic operations */CV_IMPL CvMatND*cvInitMatNDHeader( CvMatND* mat, int dims, const int* sizes, int type, void* data ) CvMatND* result = 0; CV_FUNCNAME( cvInitMatNDHeader ); _BEGIN_; type = CV_MAT_TYPE(type); int i; int64 step = CV_ELEM_SIZE(type); if( !mat ) CV_ERROR( CV_StsNullPtr, NULL matrix header pointer ); if( step = 0 ) CV_ERROR( CV_StsUnsupportedFormat, invalid array data type ); if( !sizes ) CV_ERROR( CV_StsNullPtr, NULL pointer ); if( dims CV_MAX_DIM ) CV_ERROR( CV_StsOutOfRange, non-positive or too large number of dimensions ); for( i = dims - 1; i = 0; i- ) if( sizesi dimi.size = sizesi; if( step INT_MAX ) CV_ERROR( CV_StsOutOfRange, The array is too big ); mat-dimi.step = (int)step; step *= sizesi; mat-type = CV_MATND_MAGIC_VAL | (step dims = dims; mat-data.ptr = (uchar*)data; mat-refcount = 0; mat-hdr_refcount = 0; result = mat; _END_; if( cvGetErrStatus() type = 0; mat-data.ptr = 0; return result;/ Creates CvMatND and underlying dataCV_IMPL CvMatND*cvCreateMatND( int dims, const int* sizes, int type ) CvMatND* arr = 0; CV_FUNCNAME( cvCreateMatND ); _BEGIN_; CV_CALL( arr = cvCreateMatNDHeader( dims, sizes, type ); CV_CALL( cvCreateData( arr ); _END_; if( cvGetErrStatus() 0 ) cvReleaseMatND( &arr ); return arr;/ Creates CvMatND header onlyCV_IMPL CvMatND*cvCreateMatNDHeader( int dims, const int* sizes, int type ) CvMatND* arr = 0; CV_FUNCNAME( cvCreateMatNDHeader ); _BEGIN_; if( dims CV_MAX_DIM ) CV_ERROR( CV_StsOutOfRange, non-positive or too large number of dimensions ); CV_CALL( arr = (CvMatND*)cvAlloc( sizeof(*arr) ); CV_CALL( cvInitMatNDHeader( arr, dims, sizes, type, 0 ); arr-hdr_refcount = 1; _END_; if( cvGetErrStatus() dims*sizeof(sizes0) ); for( i = 0; i dims; i+ ) sizesi = src-dimi.size; CV_CALL( dst = cvCreateMatNDHeader( src-dims, sizes, src-type ); if( src-data.ptr ) CV_CALL( cvCreateData( dst ); CV_CALL( cvCopy( src, dst ); _END_; return dst;static CvMatND*cvGetMatND( const CvArr* arr, CvMatND* matnd, int* coi ) CvMatND* result = 0; CV_FUNCNAME( cvGetMatND ); _BEGIN_; if( coi ) *coi = 0; if( !matnd | !arr ) CV_ERROR( CV_StsNullPtr, NULL array pointer is passed ); if( CV_IS_MATND_HDR(arr) if( !(CvMatND*)arr)-data.ptr ) CV_ERROR( CV_StsNullPtr, The matrix has NULL data pointer ); result = (CvMatND*)arr; else CvMat stub, *mat = (CvMat*)arr; if( CV_IS_IMAGE_HDR( mat ) CV_CALL( mat = cvGetMat( mat, &stub, coi ); if( !CV_IS_MAT_HDR( mat ) CV_ERROR( CV_StsBadArg, Unrecognized or unsupported array type ); if( !mat-data.ptr ) CV_ERROR( CV_StsNullPtr, Input array has NULL data pointer ); matnd-data.ptr = mat-data.ptr; matnd-refcount = 0; matnd-hdr_refcount = 0; matnd-type = mat-type; matnd-dims = 2; matnd-dim0.size = mat-rows; matnd-dim0.step = mat-step; matnd-dim1.size = mat-cols; matnd-dim1.step = CV_ELEM_SIZE(mat-type); result = matnd; _END_; return result;/ returns number of dimensions to iterate./*Checks whether arrays have equal type, sizes (mask is optional arraythat needs to have the same size, but 8uC1 or 8sC1 type).Returns number of dimensions to iterate through:0 means that all arrays are continuous,1 means that all arrays are vectors of continuous arrays etc.and the size of largest common continuous part of the arrays */CV_IMPL intcvInitNArrayIterator( int count, CvArr* arrs, const CvArr* mask, CvMatND* stubs, CvNArrayIterator* iterator, int flags ) int dims = -1; CV_FUNCNAME( cvInitArrayOp ); _BEGIN_; int i, j, size, dim0 = -1; int64 step; CvMatND* hdr0 = 0; if( count CV_MAX_ARR ) CV_ERROR( CV_StsOutOfRange, Incorrect number of arrays ); if( !arrs | !stubs ) CV_ERROR( CV_StsNullPtr, Some of required array pointers is NULL ); if( !iterator ) CV_ERROR( CV_StsNullPtr, Iterator pointer is NULL ); for( i = 0; i = count; i+ ) const CvArr* arr = i count ? arrsi : mask; CvMatND* hdr; if( !arr ) if( i hdri = hdr; if( i 0 ) if( hdr-dims != hdr0-dims ) CV_ERROR( CV_StsUnmatchedSizes, Number of dimensions is the same for all arrays ); if( i count ) switch( flags & (CV_NO_DEPTH_CHECK|CV_NO_CN_CHECK) case 0: if( !CV_ARE_TYPES_EQ( hdr, hdr0 ) CV_ERROR( CV_StsUnmatchedFormats, Data type is not the same for all arrays ); break; case CV_NO_DEPTH_CHECK: if( !CV_ARE_CNS_EQ( hdr, hdr0 ) CV_ERROR( CV_StsUnmatchedFormats, Number of channels is not the same for all arrays ); break; case CV_NO_CN_CHECK: if( !CV_ARE_CNS_EQ( hdr, hdr0 ) CV_ERROR( CV_StsUnmatchedFormats, Depth is not the same for all arrays ); break; else if( !CV_IS_MASK_ARR( hdr ) CV_ERROR( CV_StsBadMask, Mask should have 8uC1 or 8sC1 data type ); if( !(flags & CV_NO_SIZE_CHECK) ) for( j = 0; j dims; j+ ) if( hdr-dimj.size != hdr0-dimj.size ) CV_ERROR( CV_StsUnmatchedSizes, Dimension sizes are the same for all arrays ); else hdr0 = hdr; step = CV_ELEM_SIZE(hdr-type); for( j = hdr-dims - 1; j dim0; j- ) if( step != hdr-dimj.step ) break; step *= hdr-dimj.size; if( j = dim0 & step INT_MAX ) j+; if( j dim0 ) dim0 = j; iterator-hdri = (CvMatND*)hdr; iterator-ptri = (uchar*)hdr-data.ptr; size = 1; for( j = hdr0-dims - 1; j dim0; j- ) size *= hdr0-dimj.size; dims = dim0 + 1; iterator-dims = dims; iterator-count = count; iterator-size = cvSize(size,1); for( i = 0; i stacki = hdr0-dimi.size; _END_; return dims;/ returns zero value if iteration is finished, non-zero otherwiseCV_IMPL int cvNextNArraySlice( CvNArrayIterator* iterator ) assert( iterator != 0 ); int i, dims, size = 0; for( dims = iterator-dims; dims 0; dims- ) for( i = 0; i count; i+ ) iterator-ptri += iterator-hdri-dimdims-1.step; if( -iterator-stackdims-1 0 ) break; size = iterator-hdr0-dimdims-1.size; for( i = 0; i count; i+ ) iterator-ptri -= (size_t)size*iterator-hdri-dimdims-1.step; iterator-stackdims-1 = size; return dims 0;/* CvSparseMat creation and basic operations */ Creates CvMatND and underlying dataCV_IMPL CvSparseMat*cvCreateSparseMat( int dims, const int* sizes, int type ) CvSparseMat* arr = 0; CV_FUNCNAME( cvCreateSparseMat ); _BEGIN_; type = CV_MAT_TYPE( type ); int pix_size1 = CV_ELEM_SIZE1(type); int pix_size = pix_size1*CV_MAT_CN(type); int i, size; CvMemStorage* storage; if( pix_size = 0 ) CV_ERROR( CV_StsUnsupportedFormat, invalid array data type ); if( dims CV_MAX_DIM_HEAP ) CV_ERROR( CV_StsOutOfRange, bad number of dimensions ); if( !sizes ) CV_ERROR( CV_StsNullPtr, NULL pointer ); for( i = 0; i dims; i+ ) if( sizesi size0); arr-type = CV_SPARSE_MAT_MAGIC_VAL | type; arr-dims = dims; arr-refcount = 0; arr-hdr_refcount = 1; memcpy( arr-size, sizes, dims*sizeof(sizes0); arr-valoffset = (int)cvAlign(sizeof(CvSparseNode), pix_size1); arr-idxoffset = (int)cvAlign(arr-valoffset + pix_size, sizeof(int); size = (int)cvAlign(arr-idxoffset + dims*sizeof(int), sizeof(CvSetElem); CV_CALL( storage = cvCreateMemStorage( CV_SPARSE_MAT_BLOCK ); CV_CALL( arr-heap = cvCreateSet( 0, sizeof(CvSet), size, storage ); arr-hashsize = CV_SPARSE_HASH_SIZE0; size = arr-hashsize*sizeof(arr-hashtable0); CV_CALL( arr-hashtable = (void*)cvAlloc( size ); memset( arr-hashtable, 0, size ); _END_; if( cvGetErrStatus() heap-storage ); cvFree( &arr-hashtable ); cvFree( &arr ); _END_;/ Creates CvMatND and underlying dataCV_IMPL CvSparseMat*cvCloneSparseMat( const CvSparseMat* src ) CvSpa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中学体育足球教学
- 皮下注射教学设计与操作规范
- 2025水库YY搬迁工程合同 水库YY项目搬迁供地政策
- 室内设计预案
- 幼儿烟花爆竹安全教育指南
- 2023年碳化硅陶瓷材料行业洞察报告及未来五至十年预测分析报告
- 2025活动板房租赁合同(标准版)
- 2025的建筑分包合同范本
- 2025深圳房屋租赁合同范本官方版
- 心理健康自信心课件
- 音乐欣赏活动教案课件
- 总公司与分公司的交易合同6篇
- 2024中考模拟题历史历史(贵州贵阳卷)(考试版A3)
- 2024年宿迁市融媒体中心招聘考试真题
- 《业绩分析报告实例》课件
- 2024电气工程师考试练习题分享试题及答案
- 统编版(2024)七年级下册道德与法治期中测试卷(含答案)
- 财务会计考试试题及答案
- 县某中学体育场项目可行性研究报告
- 2025江苏南京大数据集团有限公司招聘45人笔试参考题库附带答案详解
- 架桥机安拆安全监理细则
评论
0/150
提交评论