OpenCV学习笔记(一) OpenCV的概…
来源:互联网 发布:学会plc编程工资高吗 编辑:程序博客网 时间:2024/06/06 02:46
OpenCV是一个基于C/C++语言的开源图像处理函数库,其特点有:
1.
2.
3.
4.
5.
【OpenCV功能】
1.
2.
3.
奇异值分解);
4.
5.
6.
7.
8.
9.
10.
11.
【OpenCV基本模块】
cv——核心函数库
cvaux——辅助函数库
cxcore——数据结构与线性代数库
highgui——GUI函数库
ml——机器学习函数库
【OpenCV命名规则】
A.
cvActionTargetMod(…)
Action=核心功能(core functionality)(eg:set,create)
Target=目标图像区域(target image area)(eg:contour,polygon)
Mod=(可选的)调整语(optional modifiers)(eg:argument type)
B.
CV_(S|U|F)
S=符号整形
U=无符号整形
F=浮点型
(eg:CV_8UC1是指一个8位无符号整形单通道矩阵,
C.
IPL_DEPTH(S|U|F)
Eg:
IPL_DEPTH_8U图像像素数据是8位无符号整形。
IPL_DEPTH_32P图像像素数据是32位浮点型。
【头文件包含】
#include——核心函数库
#include——辅助函数库
#include——机器学习库
#include——GUI函数库
#include//一般不需要,因为cv.h已经包含该头文件数据结构与线性代数库
【OpenCV中的基本数据结构】
1.
A.
IPLImage
Int
颜色通道的数目(1,2,3,4)
Int
像素的位深
IPL_DEPTH_8U
IPL_DEPTH_16S
IPL_DEPTH_32F
IPL_DEPTH_64F
Int width
图像宽度(像素为单位)
Int height
图像高度
Char * imageData
图像数据指针
彩色图像按照BGR的顺序存储数据
Int dataOrder
0——将像素点不同的通道的值交错排在一起,形成单一的像素平面
1——把所有的像素同通道值排在一起,形成若干个通道平面,再把平面排列起来
Int origin
0 –像素原点=左上角
1 –像素原点为左下角(windows bitmaps
Style)
Int widthStep
相邻行的同列点之间的字节数
Int imageSize
图像的大小(字节为单位)=height*widthStep
Struct _IplROI *roi
图像的感兴区域(ROI),ROI非空的会后对图像的处理仅限于ROI区域
Char *imageDataOrigin
图像数据未对齐时候的数据原点指针
(需要正确地重新分配图像内存)
Int align
图像数据的行对齐 :4 or 8 bytealignment
Char colorModel[4]
颜色模型(OpenCV中没有此项)
2.
A.2D矩阵
CvMat(2D矩阵)
int
元素类型
int
整行长度字节数
Int
行、列数
int height,width
矩阵高度、宽度、与rows,cols对应
Union data
Uchar *ptr
指向unsignedchar矩阵的指针
Short *s
指向short矩阵的指针
Int * i
指向整形矩阵的指针
Float *fl
指向浮点型矩阵的指针
Double *db
指向双精度浮点型矩阵的指针
B.N维矩阵
CvMatND(N-维矩阵)
Int
元素类型(uchar,short,int,float,double)
Int dims
矩阵维数
Union
Uchar *Ptr
Short *s
Int
Float
Double *db
Struct dim[]
各维信息
Size 元素数目
Step 元素间距 字节为单位
C.CvSparseMat//N-维稀疏矩阵
D.一般矩阵
E.标量
CvScalar
初始化:
CvScalar
CvScalar
s.val[0]=20.0
3.
CvPoint
CvPoint 2D32fp=cvPoint2d32f(float x,float y);//浮点型二维点
Cvpoint3D32fp=cvPoint3D32f(float x,float y,float z);//浮点型三维点
4.
cvSize=cvSize(int width,int height)
CvSize2D32f
5.
CvRect
【OpenCV的图像读写】
1.
OpenCV默认将读入的图像强制转换为一副三通道彩色图像:
IplImage *
Img=cvLoadImage(fileName);
If(!img)printf(“could
OpenCV支持图像格式有:BMP、DIB、JPEG、JPE、PNG、PBM、PGM、PPM、SR、RAS、TIFF、TIF
可以按照如下的方式修改读入的方式:
flag:
2.
If(!cvSaveImage(outFileName,img)) printf(“could not save:%s\n”,outFileName)
保存的图像的格式由outFileName中的扩展名确定
【OpenCV访问图像像素】
1.
IplImage
CvScalar
S=cvGet2D(img,i,j);//注意本函数中坐标参数的顺序与其它的openCV函数坐标参数顺序恰好相反,本函数中的i代表height,而j代表width
Printf(“intensity=%f\n”,s.val[0]);
s.val[0]=111;
cvSet2D(img,I,j,s); //设置img(J,i)位置的像素值为s
2.
单通道字节型图像:
IplImage*img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
((uchar*)(img->imageData+i*img->widthstep))[j]=111;
多通道字节型图像:
IplImage *img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
((uchar*)(img->imageData+i*img->widthStep))[j*img->nChannels+0]=111;
((ucahr*)(img->imageData+i*img->widthStep))[j*img->nChannels+1]=112;
((uchar*)(img->imageData+i*img->widthStep))[j*img->nChannels+2]=113;
多通道浮点型图像:
IplImage*img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
((float *)(img->imageData +i*img->widthStep))[j*img->nChannels + 0]=111; //B
((float *)(img->imageData +i*img->widthStep))[j*img->nChannels + 1]=112; //G
((float *)(img->imageData +i*img->widthStep))[j*img->nChannels + 2]=113; //R
3.
单通道字节型图像:
IplImage*img=cvCreateImage(cvSIze(640,480),IPL_DEPTH_8U,1)
Intheight
Intwidth
IntStep
Uchar*data
Data[i*setp+j]=111;
4.
首先定义一个C++
Template class Image
{
Private:
};
Typedef
Typedef
}RgbPixelFloat;
typedef
typedef
typedef
typedef
对于单通道字节型图像:
IplImage
BwImage imgA(img);
imgA[i][j]=111;
对于多通道字节型图像:
IplImage *img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
RgbImage imgA(img);
imgA[i][j].b=111;
imgA[i][j].g=111;
imgA[i][j].r=111;
对于多通道浮点型图像
IplImage*img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3)
RgbImageFloatimgA(img);
imgA[i][j].b=111;
imgA[i][j].g=111;
imgA[i][j].r=111;
【图像转换】
1)
cvConcertImage(src,dst,flags=0)
src=float/byte
dst=byte grayscale/colorimae
flags=CV_CVTIMG_FLIP
2)
cvCvtColor(cimg,gimg,CV_BGR2GRAY)
//使用直接转换
for(i=0;iheight;i++)
for(j=0;jwidth;j++)
3)
cvCvColor(src,dst,code)
code=CV_2
/=RGB,BGR,GRAY,HSV,YCrCb,XYZ,Lab,Luv,HLS
- OpenCV学习笔记(一) OpenCV的概…
- OpenCV 学习笔记
- openCV学习笔记(一)---初始openCV
- OpenCV学习笔记(一)
- opencv学习笔记(一)
- 《学习OpenCV》笔记(一)
- OpenCV学习笔记(一)
- opencv学习笔记(一)
- opencv 学习笔记(一)
- opencv学习笔记(一)
- OpenCV学习笔记(一)
- opencv 学习笔记(一)
- Opencv学习笔记(一)
- OpenCV学习笔记(一)
- OpenCV学习笔记(一)
- OpenCV学习笔记一
- Opencv学习笔记【一】
- opencv学习笔记一
- OGRE中使用CEGUI【1】
- OGRE内部渲染循环
- OGRE地形初步
- LOD地形绘制
- 我的博客今天3岁240天了,我领取了…
- OpenCV学习笔记(一) OpenCV的概…
- OpenCV学习 (二) OpenCV基本操…
- 各种希腊字母念法
- DCM,PLL和MMCM的区别
- C#域与属性
- 负熵(看了好久,竟然这么简单,哎!…
- 傅里叶变换与数字图像处理
- [转]图像傅立叶变换的原理和…
- [转]图像傅立叶变换的原理和…