CvMat学习
来源:互联网 发布:网络公关公司如何收费 编辑:程序博客网 时间:2024/04/30 00:29
CvMat()函数是OpenCV 中重要的矩阵变换函数,使用方法为cvMat* cvCreateMat ( int rows, int cols, int type );
这里type可以是任何预定义类型。
1、初始化矩阵:
方式一、逐点赋值式:
CvMat*mat = cvCreateMat( 2, 2, CV_64FC1 );// 64FC1 for double,64位浮点型数据
cvZero( mat );//全为0
cvmSet( mat, 0, 0, 1 );
cvmSet( mat, 0, 1, 2 );
cvmSet( mat, 1, 0, 3 );
cvmSet( mat, 1, 1, 4 );
cvReleaseMat( &mat );
方式二、连接现有数组式:
double a[ ] = { 1, 2, 3, 4,5, 6, 7, 8,
9, 10, 11, 12 };
CvMat mat = cvMat( 3, 4, CV_64FC1, a ); //把数组a赋给矩阵mat
// 不需要cvReleaseMat,因为数据内存分配是由double定义的数组进行的。
2、IplImage 到cvMat的转换
方式一、cvGetMat方式:
CvMat mathdr;
CvMat *mat = cvGetMat( img, &mathdr );
方式二、cvConvert方式:
IplImage *img;
CvMat *mat =cvCreateMat( img->height, img->width, CV_64FC3 );
cvConvert( img, mat ); // #define cvConvert( src, dst ) cvConvertScale( (src), (dst), 1, 0 )
3、cvArr(IplImage或者cvMat)转化为cvMat
方式一、cvGetMat方式:
int coi = 0;
cvMat *mat = (CvMat*)arr;
if( !CV_IS_MAT(mat) )
{
mat = cvGetMat( mat, &matstub, &coi );
if (coi != 0) reutn; // CV_ERROR_FROM_CODE(CV_BadCOI);
}
写成函数为:
// This is just an example of function to support both IplImage and cvMat as an input
CVAPI( void ) cvIamArr( const CvArr* arr )
{
CV_FUNCNAME( "cvIamArr" );
__BEGIN__;
CV_ASSERT( mat == NULL );
CvMat matstub, *mat = (CvMat*)arr;
int coi = 0;
if( !CV_IS_MAT(mat) )
{
CV_CALL( mat = cvGetMat( mat,&matstub, &coi ) );
if (coi != 0)CV_ERROR_FROM_CODE(CV_BadCOI);
}
// Process as cvMat
__END__;
}
4、图像直接操作
方式一:直接数组操作 int col, row, z;
uchar b, g, r;
for( row = 0; row < img->height; row++ )
{
for ( col = 0; col < img->width; col++ )
{
b = img->imageData[img->widthStep * row + col *3]
g = img->imageData[img->widthStep * row + col *3 + 1];
r = img->imageData[img->widthStep * row + col *3 + 2];
}
}
方式二:宏操作:
int row, col;
uchar b, g, r;
for( row = 0; row < img->height; row++ )
{
for ( col = 0; col < img->width; col++ )
{
b = CV_IMAGE_ELEM( img, uchar, row, col * 3 );
g = CV_IMAGE_ELEM( img, uchar, row, col * 3 + 1 );
r = CV_IMAGE_ELEM( img, uchar, row, col * 3 + 2 );
}
}
注:CV_IMAGE_ELEM(pImage, uchar, i, j) = CV_MAT_ELEM(*mat, uchar, i, j)
CV_IMAGE_ELEM(img, uchar, row, col * img->nChannels + ch )
见电脑E/2011/学习OpenCV
- CvMat学习
- CvMat学习
- opencv CvMat矩阵学习
- CvMat学习(1)
- opencv CvMat矩阵学习
- opencv CvMat矩阵学习
- opencv CvMat矩阵学习
- opencv CvMat矩阵学习
- 【学习OpenCV】Mat、CvMat、IplImage
- 2.2 opencv CvMat矩阵学习
- CvMat
- CvMat
- CvMat
- OpenCV 学习笔记 [1] 基本数据结构, CvMat
- opencv中cvmat的通道学习
- 学习OpenCV_基本数据结构,CvMat,矩阵访问
- openCV学习之CvMat矩阵访问
- 学习javacv之六:保存CvMat到xml文件,从xml文件读取数据,填充CvMat
- 父进程等待子进程终止 wait, WIFEXITED, WEXITSTATUS
- auto create Makefile
- 专家观点:你必须了解的嵌入式Linux特性
- 【异常处理】MFC程序崩溃的友好处理
- 手动关联步骤-性能测试经典面试题
- CvMat学习
- Lotus Notes survives the ending date of the world!
- mysql安装图解 mysql图文安装教程(详细说明)
- jqGrid与Struts2的结合应用(十) —— 真正的自定义表单查询
- Win8 获得点击控件的位置,显示上下文菜单
- Linux find 用法示例
- MyBatis框架使用(一)
- jqGrid与Struts2的结合应用(九) —— 补充细节
- 浅聊在美找工作以及工作之后的感受