cvmSet cvmGet

本文详细介绍了如何使用OpenCV进行图像处理,包括绘制图形、加载和显示图像。此外,还深入探讨了矩阵的创建、初始化、克隆及各种赋值方法,展示了如何利用CvMat结构体进行矩阵运算。

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

//运行参数:girl.jpg #pragma comment(lib,"highgui.lib")#pragma comment(lib,"cxcore.lib")#pragma comment(lib,"cv.lib")#pragma comment(lib,"ml.lib")#pragma comment(lib,"cvaux.lib")#pragma comment(lib,"cvcam.lib") #include "cv.h"#include "highgui.h"#include <stdio.h>inline void cvDoubleMatPrint( const CvMat* mat );int main( int argc, char** argv ){ IplImage* pImg; //声明IplImage指针 //载入图像,强制转化为Gray if( argc == 2 && (pImg = cvLoadImage( argv[1], CV_LOAD_IMAGE_UNCHANGED)) != 0 ) {// 在点 (100,100) 和 (200,200) 之间绘制一矩形,边线用红色、宽度为 1cvRectangle(pImg, cvPoint(100,100), cvPoint(200,200), cvScalar(0,0,255), 1);// 圆心为(100,100)、半径为20. 圆周绿色、宽度为1cvCircle(pImg, cvPoint(100,100), 20, cvScalar(0,255,0), 1);// 在 (100,100) 和 (200,200) 之间、线宽为 1 的绿色线段cvLine(pImg, cvPoint(100,100), cvPoint(200,200), cvScalar(0,255,0), 1);//printf("sizeof(double)=%d\n",sizeof(double)); //=8//CvMat* cvCreateMat(int rows, int cols, int type);/* type: 矩阵元素类型.  按CV_<bit_depth>(S|U|F)C<number_of_channels> 方式指定.  例如: CV_8UC1 、CV_32SC2.  示例:  */  //CvMat* M1 = cvCreateMat(4,4,CV_32FC1);  CvMat* M1 = cvCreateMat(4,4,CV_64FC1);  cvSetIdentity(M1);//初始化矩阵为单位矩阵  int i,j;   //cvmSet(M1,1,1,2.0); // Set M(i,j) int n       = M1->cols; float *data = M1->data.fl;  //data[i*n+j] = 3.0;  printf("\n=====赋值为3.0==============\n");//void  cvmSet( CvMat* mat, int row, int col, double value )   for(i=0;i<4;i++)   for(j=0;j<4;j++)    //cvmSet(M1,i,j,3.0);    data[i*n+j] = 3.0;      //cvmGet(M,i,j); // Get M(i,j)    //CV_INLINE  double  cvmGet( const CvMat* mat, int row, int col )   for( i=0;i<4;i++)   {   for( j=0;j<4;j++)    printf("%f ",cvmGet(M1,i,j));   printf("\n");    }  printf("\n===End:赋值为3.0==============\n");  CvMat* M2;  M2=cvCloneMat(M1);//复制矩阵  printf("=============================\n");  {     printf("=======方式一、逐点赋值式====\n");     CvMat* mat = cvCreateMat( 2, 2, CV_64FC1 );  cvZero( mat );  cvmSet( mat, 0, 0, 1 );  cvmSet( mat, 0, 1, 2 );  cvmSet( mat, 1, 0, 3 );  cvmSet( mat, 1, 1, 4 );  cvDoubleMatPrint(mat);  cvReleaseMat( &mat );        printf("\n=====End:方式一、逐点赋值式====\n");  }  //初始化矩阵  { double a[] = { 1234,       5678,       9, 10, 11, 12 }; CvMat Ma=cvMat(3, 4, CV_64FC1, a); printf("===使用数组初始化====================\n");     for( i=0;i<3;i++)    {    for( j=0;j<4;j++)     printf("%lf ",cvmGet(&Ma,i,j));    printf("\n");     }    printf("===修改数组值=================\n");   a[1*4+1] = 2.0; // Ma(i,j)=2.0;    for( i=0;i<3;i++)    {    for( j=0;j<4;j++)     printf("%f ",cvmGet(&Ma,i,j));    printf("\n");     }  printf("=====End:使用数组初始化============\n");  //等价于:  {  CvMat Ma;  cvInitMatHeader(&Ma, 3, 4, CV_64FC1, a); }  }  //printf("%x\n",M1);  cvReleaseMat(&M1);//释放矩阵内存:CVAPI(void)  cvReleaseMat( CvMat** mat );  //printf("%x\n",M1);//成功释放后M1被置为了NULL  cvReleaseMat(&M2);  cvNamedWindow( "Image", 1 ); // 创建窗口  cvShowImage( "Image", pImg ); // 显示图像  cvWaitKey(0);     // 等待按键  cvDestroyWindow( "Image" );  // 销毁窗口  cvReleaseImage( &pImg );  // 释放图像  return 0; } return -1;}inline void cvDoubleMatPrint( const CvMat* mat ){    int i, j;    for( i = 0; i < mat->rows; i++ )    {        for( j = 0; j < mat->cols; j++ )        {            printf( "%lf ",cvmGet( mat, i, j ) );        }        printf( "\n" );    }}




=====赋值为3.0==============
32.000008 32.000008 32.000008 32.000008
32.000008 32.000008 32.000008 32.000008
0.000000 0.000000 1.000000 0.000000
0.000000 0.000000 0.000000 1.000000


===End:赋值为3.0==============
=============================
=======方式一、逐点赋值式====
1.000000 2.000000
3.000000 4.000000


=====End:方式一、逐点赋值式====
===使用数组初始化====================
1.000000 2.000000 3.000000 4.000000
5.000000 6.000000 7.000000 8.000000
9.000000 10.000000 11.000000 12.000000
===修改数组值=================
1.000000 2.000000 3.000000 4.000000
5.000000 2.000000 7.000000 8.000000
9.000000 10.000000 11.000000 12.000000
=====End:使用数组初始化============

           

给我老师的人工智能教程打call!http://blog.youkuaiyun.com/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值