#include "cv.h"
#include "highgui.h"
#include <stdio.h>
void PrintMat(CvMat *A);//显示矩阵
void GenRandn(CvMat *arr,int seed);//生成正态分布的随机矩阵
void GenRand(CvMat *arr,int seed);//生成[0,1]均匀分布的随机矩阵
static int cmp_func(const void * _a,const void * _b,void * userdata);//比较函数
void Test_Multiply();//测试矩阵乘法
void Test_cvGetRawData();//将缓存数据填入CvMat数组中
void Test_DCT();//计算DCT变换
void Test_Rand();//生成随机数
void Test_SeqSort();//二维序列排序
int main(void)
{Test_Multiply();Test_cvGetRawData();Test_DCT();Test_Rand();Test_SeqSort();return 0;
}
/*矩阵乘法*/
void Test_Multiply()
{double a[]={1,2,3,4,5,6,7,8,9,10,11,12};double b[]={1,5,9,2,6,10,3,7,11,4,8,12};double c[9];CvMat Ma,Mb,Mc;printf("/n=== Test Multiply ===/n");cvInitMatHeader(&Ma,3,4,CV_64FC1,a,CV_AUTOSTEP);cvInitMatHeader(&Mb,4,3,CV_64FC1,b,CV_AUTOSTEP);cvInitMatHeader(&Mc,3,3,CV_64FC1,c,CV_AUTOSTEP);cvMatMulAdd(&Ma,&Mb,0,&Mc);PrintMat(&Ma);PrintMat(&Mb);PrintMat(&Mc);
}
void Test_cvGetRawData()
{float *data;int step;float a[]={ 1,2,3,4,-5,6,7,8,9,-10,-11,12};CvMat array;CvSize size;int x,y;printf("/n ===Test get raw dara! ===/n");cvInitMatHeader(&array,3,4,CV_32FC1,a,CV_AUTOSTEP);cvGetRawData(&array,(uchar **)&data,&step,&size);//得到矩阵的信息step/=sizeof(data[0]);printf("/nCvMat = ");PrintMat(&array);printf("/nData = ");for (y=0;y<size.height;y++,data+=step){printf("/n");for (x=0;x<size.width;x++){data[x]=(float)fabs(data[x]);printf("%8.2f",data[x]);}printf("/n");}
}
void Test_DCT()
{float data[]={1,2,3,4,5,6,7,8};CvMat a;a = cvMat(2,4,CV_32FC1,data);printf("/n === Test DCT ===");printf("/nOriginal Matrix = ");PrintMat(&a);cvDCT(&a,&a,CV_DXT_FORWARD);printf("/n2-D DCT = ");PrintMat(&a);cvDCT(&a,&a,CV_DXT_INVERSE);printf("/n2-D IDCT = ");PrintMat(&a);
}
void Test_Rand()
{CvMat *a=cvCreateMat(10,6,CV_32F);int i;printf("/n === Test generating random matrix === ");for (i=0;i<5;i++){GenRandn(a,i);PrintMat(a);}cvReleaseMat(&a);
}
void GenRand(CvMat *arr,int seed)
{CvRandState rng;rng.state =cvRNG(0xffffffff);cvRandInit(&rng,0,1,    /* 现在使用虚参数以后再调整 */seed,    /* 使用一个种子  */CV_RAND_UNI    /* 指定为均匀分布类型 */);cvRandArr(&rng.state,arr,CV_RAND_UNI,cvRealScalar(0),cvRealScalar(1));
}
void GenRandn(CvMat *arr,int seed)
{CvRandState rng;rng.state =cvRNG(0xffffffff);cvRandInit(&rng,0,1,    /* 现在使用虚参数以后再调整 */seed,    /* 使用一个种子  */CV_RAND_NORMAL    /* 指定为均匀分布类型 */);cvRandArr(&rng.state,arr,CV_RAND_NORMAL,cvRealScalar(0),cvRealScalar(1));
}
void PrintMat(CvMat *A)
{int i,j;for (i=0;i<A->rows;i++){printf("/n");switch(CV_MAT_DEPTH(A->type)){case CV_32F:case CV_64F:for (j=0;j<A->cols;j++)printf("%9.3f",(float)cvGetReal2D(A,i,j));break;case CV_8U:case CV_16U:for (j=0;j<A->cols;j++)printf("%6d",(int)cvGetReal2D(A,i,j));break;default:break;}}printf("/n");
}
void Test_SeqSort()
{CvMemStorage *storage = cvCreateMemStorage(0);CvSeq *seq=cvCreateSeq(CV_32SC2,sizeof(CvSeq),sizeof(CvPoint),storage);int i;printf("/n=== Test Sequence sorting! === ");for (i=0;i<10;i++){CvPoint pt;pt.x= rand()%1000; // 得到1000以内的随机数pt.y= rand()%1000;cvSeqPush(seq,&pt);//添加元素到序列末尾}printf("/nOriginal point set:/n");for (i=0;i<seq->total;i++){CvPoint *pt =(CvPoint *)cvGetSeqElem(seq,i);printf("(%d,%d)/n",pt->x,pt->y);}cvSeqSort(seq,cmp_func,0);printf("/nAfter sorting: /n");for (i=0;i<seq->total;i++){CvPoint *pt =(CvPoint *)cvGetSeqElem(seq,i);printf("(%d,%d)/n",pt->x,pt->y);}cvClearSeq(seq);cvReleaseMemStorage(&storage);
}
static int cmp_func(const void * _a,const void * _b,void * userdata)
{CvPoint *a=(CvPoint *)_a;CvPoint *b=(CvPoint *)_b;int y_diff=a->y-b->y;int x_diff=a->x-b->x;return y_diff?y_diff:x_diff;
}本文转自gnuhpc博客园博客,原文链接:http://www.cnblogs.com/gnuhpc/archive/2012/07/02/2573824.html,如需转载请自行联系原作者

OpenCV学习】矩阵运算和操作2相关推荐

  1. OpenCV学习笔记11_Mask操作与图像叠加

    一.掩膜操作Mask 在opencv功能(两点): 1. 逻辑运算模板mask: 可以理解为一个字帖模板, 能描的地方就看成是一个Mask, 后续的处理只针对这个Mask来操作 例如: inline ...

  2. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  3. OpenCV学习笔记四-image的一些整体操作

    title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...

  4. OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作

    OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作 一.Write_XML_and_YAML_File(写入XML) #include <opencv2/opencv ...

  5. opencv学习—简单车牌识别操作(python)

    opencv学习-简单车牌识别操作(python) 目录 opencv学习-简单车牌识别操作(python) 利用opencv进行车牌识别的详细流程如下: 1.车牌检测 2.分割车牌号并进行识别 3. ...

  6. OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年

    首先还是要感谢箫鸣朋友在我<OpenCV学习笔记(四十)--再谈OpenCV数据结构Mat详解>的留言,告诉我M.at<float>(3, 3)在Debug模式下运行缓慢,推荐 ...

  7. 【走进OpenCV】学习Opencv不得不掌握的操作

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白导读 学习计算机视觉最重要的能力应该就是编程了,为了帮助小伙伴 ...

  8. OpenCV的实用图像处理操作案例分享

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 图像处理适用于图像和视频.良好的图像 ...

  9. OpenCV中图像形态学操作

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:视学算法 图像形态学是图像处理的分支学科,在二值图像处理 ...

  10. 基于OpenCV的图像强度操作

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 01. 什么是图像强度操作 更改任何通道中的像素值 对图像的数学运 ...

最新文章

  1. [云炬创业基础笔记]第二章创业者测试1
  2. c++ 已声明变量提示未定义
  3. 计算机主机风扇安装方法,电脑机箱怎么安装风扇减震胶钉保护主板cup?
  4. EcmaScript对象克隆之谜
  5. python爬虫入门心得体会,python爬虫入门和实例
  6. angularjs1.X进阶笔记(3)——如何重构controller
  7. 2018年省赛热身赛第4场
  8. eclipse启动时return code 13
  9. linux nohup 命令详解
  10. Web前端-html页面-网易注册表单,美化及时验证效果
  11. [技巧]如何绕过MaxtoCode的15天限制
  12. [渝粤教育] 西南科技大学 语言学概论(英语) 在线考试复习资料
  13. github网络安全项目工具集合
  14. SAE 联合乘云至达与谱尼测试携手共同抗疫
  15. 软件构造心得(5)spec、RI、AF、A的概念辨析之spec
  16. 关于网易2018实习生招聘的“道路布灯”问题
  17. 研发团队专业能力提升
  18. (附源码)计算机毕业设计SSM家具商城系统
  19. 一款基于安卓的观看漫画的app,有漫画排行榜、漫画目录、收藏夹、历史记录、漫画搜索、更新推送服务等
  20. kylin在hadoop 中的架构图_Kylin |1.麒麟架构及原理

热门文章

  1. Dapper使用在WCF上总是说Service找不到
  2. 诺顿无法启动扫描,扫描引擎返回错误0x20000058错误
  3. [IOI2018] seats 排座位
  4. java - rest-assured 接口测试
  5. 关于Angular样式封装
  6. AVFoundation 零碎知识
  7. 读zepto源码之工具函数
  8. [Linux] PHP程序员玩转Linux系列-自动备份与SVN
  9. Linux常用解压文件
  10. Linux rpm 命令参数使用详解[介绍和应用](转)