OpenCV学习】矩阵运算和操作2
#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相关推荐
- OpenCV学习笔记11_Mask操作与图像叠加
一.掩膜操作Mask 在opencv功能(两点): 1. 逻辑运算模板mask: 可以理解为一个字帖模板, 能描的地方就看成是一个Mask, 后续的处理只针对这个Mask来操作 例如: inline ...
- OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co
OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...
- OpenCV学习笔记四-image的一些整体操作
title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...
- OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作
OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作 一.Write_XML_and_YAML_File(写入XML) #include <opencv2/opencv ...
- opencv学习—简单车牌识别操作(python)
opencv学习-简单车牌识别操作(python) 目录 opencv学习-简单车牌识别操作(python) 利用opencv进行车牌识别的详细流程如下: 1.车牌检测 2.分割车牌号并进行识别 3. ...
- OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年
首先还是要感谢箫鸣朋友在我<OpenCV学习笔记(四十)--再谈OpenCV数据结构Mat详解>的留言,告诉我M.at<float>(3, 3)在Debug模式下运行缓慢,推荐 ...
- 【走进OpenCV】学习Opencv不得不掌握的操作
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白导读 学习计算机视觉最重要的能力应该就是编程了,为了帮助小伙伴 ...
- OpenCV的实用图像处理操作案例分享
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 图像处理适用于图像和视频.良好的图像 ...
- OpenCV中图像形态学操作
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:视学算法 图像形态学是图像处理的分支学科,在二值图像处理 ...
- 基于OpenCV的图像强度操作
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 01. 什么是图像强度操作 更改任何通道中的像素值 对图像的数学运 ...
最新文章
- [云炬创业基础笔记]第二章创业者测试1
- c++ 已声明变量提示未定义
- 计算机主机风扇安装方法,电脑机箱怎么安装风扇减震胶钉保护主板cup?
- EcmaScript对象克隆之谜
- python爬虫入门心得体会,python爬虫入门和实例
- angularjs1.X进阶笔记(3)——如何重构controller
- 2018年省赛热身赛第4场
- eclipse启动时return code 13
- linux nohup 命令详解
- Web前端-html页面-网易注册表单,美化及时验证效果
- [技巧]如何绕过MaxtoCode的15天限制
- [渝粤教育] 西南科技大学 语言学概论(英语) 在线考试复习资料
- github网络安全项目工具集合
- SAE 联合乘云至达与谱尼测试携手共同抗疫
- 软件构造心得(5)spec、RI、AF、A的概念辨析之spec
- 关于网易2018实习生招聘的“道路布灯”问题
- 研发团队专业能力提升
- (附源码)计算机毕业设计SSM家具商城系统
- 一款基于安卓的观看漫画的app,有漫画排行榜、漫画目录、收藏夹、历史记录、漫画搜索、更新推送服务等
- kylin在hadoop 中的架构图_Kylin |1.麒麟架构及原理