博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opencv里面CV_32FC1家族
阅读量:7056 次
发布时间:2019-06-28

本文共 3524 字,大约阅读时间需要 11 分钟。

因为总是接触过这样一些#define里面的东西但是总也不知道是干什么用的。而且每看一次梦比一次。

 

对于这些东西到底是什么的简写根本就不能理解。

原意是跑一下这个例程的:

cvRectangle(        myMat,        cvPoint(5, 10),        cvPoint(20, 30),        cvScalar(50, 50, 200)        );

可是第二章就练习了 IplImage这个结构,对于cvMat简直就不知所云,然后第一版:

 

CvMat *myMat;    cvRectangle(        myMat,        cvPoint(5, 10),        cvPoint(20, 30),        cvScalar(50, 50, 200)        );

 

然后就想显示,这必然是不能跑,因为没有实例化,没有分配内存空间,还想在所谓的画布上画图像,应该是不行。

所以找来了明杰同学,他也是很热心的但是说对于这个cvmat也不是很熟。于是就这样跑起来了。

 

IplImage *myImg=cvCreateImage(cvSize(500,500),8,3);    cvZero(myImg);    cvRectangle(        myImg,        cvPoint(5, 10),        cvPoint(20, 30),        cvScalar(50, 50, 200)        );    cvNamedWindow("Example6", CV_WINDOW_AUTOSIZE);    cvShowImage("Example6", myImg);    cvWaitKey(0);

 

能跑了好开心,然后看着他帮我调颜色也就是cvScalar 我想这个单词应该是读作:color的把就跟class都写成成clazz一样。/*然后跟我熟悉的rgb有出入的点在于这个里面是bgr也就是第一个参数是蓝色第二个是绿色第三个参数是红色,我记得不论是我之前的ps课程还是后面的一些android的点,或者h5里面那个颜色都是rgb的。好吧,不管了。可能是ps先入为主了,然后大家就都rgb了。这不重要。*/

然后他不熟,我这书还得往下看,到底这个cvmat怎么创建图像,

翻到例子3-4 发现了

 

CvMat *mat= cvCreateMat(5, 5, CV_32FC1);

 

我就琢磨是不是能写一个cvmat的东西。

然后根据(5,10)(20,30)就把这个矩阵的形状改成了:

CvMat *mat= cvCreateMat(50, 50, CV_32FC1);

可是刚刚的颜色没了。

F12进去:

 

 

#define CV_32FC1 CV_MAKETYPE(CV_32F,1)①

 

 

 

#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))②

 

 

 

#define CV_32F  5

 

 

 

#define CV_MAT_DEPTH(flags)     

 

#define CV_MAT_DEPTH_MASK       (CV_DEPTH_MAX - 1)//7

 

 

 

#define CV_DEPTH_MAX  (1 << CV_CN_SHIFT)//shift是3.1<<3 是8.

 

 

 

#define CV_CN_SHIFT   3

 

刚的颜关于这堆东西就是一大堆的变量代入,思路要清楚:

 

我就是想要CV_32FC1 它是:CV_MAKETYPE(CV_32F,1) 它是②

 

②式需要CV_MAT_DEPTH(depth) CV_CN_SHIFT

 

=

=

=+

=+

=+

=+

=+

 

=5&1左移3-1+0左移3位)

 

=5&8-1+0

 

=5

 

等我都特么花了半晌儿推出来了,觉得是不是要检测一下是否正确:

 

发现输出结果果然是5,婊婊忽然想到了什么,一开始 直接输出不就完了,我还费这么大劲推一边。。。

 

然后是可以接着把他们一家子

std::cout << CV_32FC1 << std::endl;

std::cout << CV_32FC2 << std::endl;

std::cout << CV_32FC3 << std::endl;

std::cout << CV_32FC4 << std::endl;

都输出来,看一下,然后就看到了这一堆define

思考着为什么不能出来结果然后就不断地换这个

CvMat *mat= cvCreateMat(50, 50, CV_32FC1);

最后的参数,直到,换了几个,然后看到了这个:

#define CV_8U   0 //8位无符号整形?

#define CV_8S   1

#define CV_16U  2

#define CV_16S  3

#define CV_32S  4

#define CV_32F  5

#define CV_64F  6

#define CV_USRTYPE1 7

感觉估计是这个意思,后面的c代表通道,前面就是8位无符号,有符号,16位无符号有符号,浮点型等等。后面还给了一个预置的用户类型。

 

然后就又回来发呆:

IplImage *myImg=cvCreateImage(cvSize(500,500),8,3);

这个8是位长,3是通道数,于是

瞬间觉得要把 这个后面的参数改成:CV_8UC3,然后

奇迹发生了,图像有色了。然后才有了前面试出了这个颜色的通道分别是bgr

 

然后开始想,还是对这个矩阵表示图像不是很理解。

同样是创建用来显示的图像给了cvMat形式 给了IplImage形式。那么他们都应该有行列,这个显而易见,后面的应该也是一样的,所以这个后面的这堆define就是连同位数和通道都写了的。所以才能用来创建一幅图片。

 

//完成opencv矩阵的初始化。    float vals[] = {
0.866025,-0.500000,0.500000,0.866025}; CvMat rotmat; cvInitMatHeader( &rotmat,//引用 2,//2行 2,//2列 CV_32FC1,//32位float型 vals//参数内容 );

 

F:\opencv249\opencv\build\include\opencv2\core\types_c.h

关于CvMat的相关描述

 

typedef struct CvMat{    int type;    int step;    /* for internal use only */    int* refcount;    int hdr_refcount;    union    {        uchar* ptr;        short* s;        int* i;        float* fl;        double* db;    } data;#ifdef __cplusplus    union    {        int rows;        int height;    };    union    {        int cols;        int width;    };#else    int rows;    int cols;#endif}CvMat;/*int * p;double *pd;char *pc;short *ps;float *pf;cout << sizeof(char) << endl;cout << sizeof(short) << endl;cout << sizeof(int) << endl;cout << sizeof(float) << endl;cout << sizeof(double) << endl;cout << sizeof(p) << endl;cout << sizeof(pd) << endl;cout << sizeof(pc) << endl;cout << sizeof(ps) << endl;*/这个 CvMat是20个字节。

 

转载于:https://www.cnblogs.com/letben/p/5420478.html

你可能感兴趣的文章
第二章习题答案
查看>>
关于硬盘的一切!
查看>>
MindMapper16中文汉化版下载
查看>>
ubuntu解压rar
查看>>
C++中数组定义及初始化
查看>>
STL顺序容器之vector类型
查看>>
逻辑卷管理器
查看>>
精选6个超实用的Word技巧,每一个大有用处!
查看>>
JDBC中注册驱动为什么使用Class.forName
查看>>
Spring知识复习之三
查看>>
这些职场办公神器,你会喜欢的!
查看>>
js操作节点,ID,name,calssname,tag,style
查看>>
yii2项目实战-用户管理之user组件的配置
查看>>
【Web】Web内容可访问性指南 1.0
查看>>
文字转语音怎么做?看完你就明白了
查看>>
设置lab样式
查看>>
ES6中class类的extend的prototype和_proto_
查看>>
如何解决90%的报表设计难题?300张报表模板任君挑选
查看>>
EL函数库(由JSTL提供的)
查看>>
vagrant学习笔记 - provision
查看>>