opencv里面CV_32FC1家族
因为总是接触过这样一些#define里面的东西但是总也不知道是干什么用的。而且每看一次梦比一次。
对于这些东西到底是什么的简写根本就不能理解。
原意是跑一下这个例程的:
cvRectangle(
myMat,
cvPoint(, ),
cvPoint(, ),
cvScalar(, , )
);
可是第二章就练习了 IplImage这个结构,对于cvMat简直就不知所云,然后第一版:
CvMat *myMat;
cvRectangle(
myMat,
cvPoint(, ),
cvPoint(, ),
cvScalar(, , )
);
然后就想显示,这必然是不能跑,因为没有实例化,没有分配内存空间,还想在所谓的画布上画图像,应该是不行。
所以找来了明杰同学,他也是很热心的但是说对于这个cvmat也不是很熟。于是就这样跑起来了。
IplImage *myImg=cvCreateImage(cvSize(,),,);
cvZero(myImg);
cvRectangle(
myImg,
cvPoint(, ),
cvPoint(, ),
cvScalar(, , )
);
cvNamedWindow("Example6", CV_WINDOW_AUTOSIZE);
cvShowImage("Example6", myImg);
cvWaitKey();
能跑了好开心,然后看着他帮我调颜色也就是cvScalar 我想这个单词应该是读作:color的把就跟class都写成成clazz一样。/*然后跟我熟悉的rgb有出入的点在于这个里面是bgr也就是第一个参数是蓝色第二个是绿色第三个参数是红色,我记得不论是我之前的ps课程还是后面的一些android的点,或者h5里面那个颜色都是rgb的。好吧,不管了。可能是ps先入为主了,然后大家就都rgb了。这不重要。*/
然后他不熟,我这书还得往下看,到底这个cvmat怎么创建图像,
翻到例子3-4 发现了
CvMat *mat= cvCreateMat(, , 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(,),,);
这个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列
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个字节。
opencv里面CV_32FC1家族的更多相关文章
- Opencv(3):基本数据类型
1.比较简单的原子类型 结构 成员 意义 CvPoint int x,y 图像中的点 CvPoint2D32f float x,y 二维空间中的点 CvPoint3D32f float x,y,z 三 ...
- OpenCV计算机视觉学习(13)——图像特征点检测(Harris角点检测,sift算法)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 前言 ...
- OpenCV人脸识别LBPH算法源码分析
1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...
- 基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训
原文链接 深度神经网络 (DNN) 培训属于计算密集型项目,需要在现代计算平台上花费数日或数周的时间方可完成. 在最近的一篇文章<基于英特尔® 至强™ E5 产品家族的单节点 Caffe 评分和 ...
- OpenCV(三) 之 基本数据结构 CvMat和 IplImage
OpenCV(三) 之 基本数据结构 CvMat和 IplImage CvMat IplImage OpenCv中基本的数据类型 类型 参数 表示 CvPoint int x,y 像素点 CvPoin ...
- 关于opencv中人脸识别主函数的部分注释详解。
近段时间在搞opencv的视频人脸识别,无奈自带的分类器的准确度,实在是不怎么样,但又能怎样呢?自己又研究不清楚各大类检测算法. 正所谓,功能是由函数完成的,于是自己便看cvHaarDetectObj ...
- OpenCV 之 支持向量机 (一)
机器学习是由 模型 + 策略 + 算法 构成的,构建一种机器学习方法 (例如,支持向量机),就是具体去确定这三个要素. 1 支持向量机 支持向量机,简称 SVM (Support Vector Ma ...
- 使用OpenCV&&C++进行模板匹配.
一:课程介绍 1.1:学习目标 学会用imread载入图像,和imshow输出图像. 用nameWindow创建窗口,用createTrackbar加入滚动条和其回调函数的写法. 熟悉OpenCV函数 ...
- opencv基于混合高斯模型的图像分割
#include "stdafx.h" #include <opencv\cv.h> #include <opencv\highgui.h> #includ ...
随机推荐
- HDU 4614-Vases and Flowers(线段树区间更新)
题意: n个花瓶(0-n-1) 现有两个操作, 操作1 给a,f 从a位置开始向后连续插f个花(一个花瓶插一个)若当前花瓶有花则向后找,直到n-1位置如果还有多余的花则丢掉求查完花的第一和最后一个位置 ...
- Zabbix探索:Proxy没有回传任何数据
因为Zabbix使用Puppet搭建的,实际上是通过脚本安装的,为了偷懒,将脚本都写一块去了,后来发现Proxy的配置和Zabbix的配置不同,又偷懒一次,复制了一下,但是为了调整脚本使用的便捷性,将 ...
- 配置OpenGL及第一个实例
Windows环境下安装GLUT的步骤:1.将下载的压缩包解开,将得到5个文件2.在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VS,则应该是其安装目录下面的“VC\PlatformSD ...
- 分享两个模拟get和post方法的工具类,让应用能够与服务器进行数据交互
很久没有码字了,今天跟大家分享一个模拟get和post方法的工具类,在安卓应用中很多都需要跟服务器进行数据交互,这需要两方面的配合,首先服务器端会给应用提供一些数据交互的接口,可是怎样在应用中去调用呢 ...
- HDU 4714 Tree2cycle
Tree2cycle dfs 不是根节点:如果边数大于等于2,则删除与父节点的边.并且是一条环,那么每个点的度数是2,则还要删除num(每个节点儿子数)-2,只留两个儿子.当然删除边的儿子也要连到环上 ...
- Hadoop文件系统常用命令
1.查看指定目录下内容 hadoop dfs –ls [文件目录] eg: hadoop dfs –ls /user/wangkai.pt 2.打开某个已存在文件 hadoop dfs –cat [f ...
- leetcode@ [318] Maximum Product of Word Lengths (Bit Manipulations)
https://leetcode.com/problems/maximum-product-of-word-lengths/ Given a string array words, find the ...
- dataStructure@ Find if there is a path between two vertices in a directed graph
Given a Directed Graph and two vertices in it, check whether there is a path from the first given ve ...
- Android中使用sqlite笔记
1.实现SQLiteHelper来在android中使用SQLite.代码如下,来自android官网. public class FeedReaderDbHelper extends SQLiteO ...
- Android 画图类View与SurfaceView之学习
在开发游戏开发中,android相应的提供了几个重要的模块: 1.显示界面的视图: Android 提供 View 和 SurfaceView 2.控制游戏整体结构: android 提供 Acti ...