一、OpenCV命名规则
1、函数 命名规则
通用函数名: cvActionTargetMod(...)
其中, Action = 核心功能(core functionality) (e.g. set, create)
Target = 目标图像区域(target image area) (e.g. contour, polygon)
Mod = (可选的)调整语(optional modifiers) (e.g. argument type)
2、 矩阵数据类型:
通用矩阵数据类型: CV_<bit_depth>(S|U|F)C<number_of_channels>
其中, S = 符号整型
U = 无符号整型
F = 浮点型
E.g.: CV_8UC1 是指一个8位无符号整型单通道矩阵,
CV_32FC2是指一个32位浮点型双通道矩阵。
3、 图像数据类型:
通用图像数据类型:IPL_DEPTH_<bit_depth>(S|U|F)
E.g.: IPL_DEPTH_8U 图像像素数据是8位无符号整型。
IPL_DEPTH_32F图像像素数据是32位浮点型。
4、 头文件:
#include <cv.h>
#include <cvaux.h>
#include <highgui.h>
#include <ml.h>
#include <cxcore.h> // 一般不需要,cv.h 内已包含该头文件
二、范例演示+相关函数分析
1、第一个程序:显示图像
【步骤】:【文件】->【 新建】->【 win32 Console Application】-> 【一个"Hello World!" application】,点击【Finish】
【代码】:
#include "stdafx.h"
#include "cv.h" //OpenCV的基本函数头文件
#include "highgui.h" //OpenCV的图像显示函数的头文件
#include "cxcore.h"
int main(int argc, char* argv[])
{
IplImage* src=cvLoadImage("F:\\1.bmp"); //"F:\\1.bmp"中\\是转义字符
cvNamedWindow("win");
cvShowImage("win",src);
cvWaitKey(0);
cvReleaseImage(&src);
cvDestroyWindow("win");
return 0;
}
【注意】:要对link进行配置,否则会编译不通过
【project】->【Settings】->【Link】,在object/library/modules中添加:
cv.lib highgui.lib cxcore.lib
【函数分析】:
(1)cvLoadImage
1) 函数原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR );
filename :要被读入的文件的文件名(包括后缀);
flags :指定读入图像的
颜色和
深度,指定的颜色可以将输入的图片转为如下3种信道:
#define CV_LOAD_IMAGE_UNCHANGED -1 /* 图像颜色不变 */
#define CV_LOAD_IMAGE_GRAYSCALE 0 /*灰度图像(单通道) */
#define CV_LOAD_IMAGE_COLOR 1 /* 彩色图像(3通道图像) */
选中CV_LOAD_IMAGE_ANYDEPTH,则输入图像格式可以为8位无符号,16位无符号,32位有符号或者32位浮点型。
#define CV_LOAD_IMAGE_ANYDEPTH 2
#define CV_LOAD_IMAGE_ANYCOLOR 4 /* 保持原样 */
如果想要载入最真实的图像,选择CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR
如果输入有冲突的标志,将采用较小的数字值。比如CV_LOAD_IMAGE_GRAYSCALE | CV_LOAD_IMAGE_COLOR将载入单通道图。
2)cvLoadImage的功能
通过文件名确定被加载图像的格式,并且该函数在内部分配图像数据结构所需要的内存空间。
支持的图像格式:BMP,DIB,JPEG,JPE,PNG,PBM,PGM,PPM,SR,RAS,TIFF。
(2)cvNamedWindow
函数原型:int cvNamedWindow( const char* name, int flags=CV_WINDOW_AUTOSIZE );
name:窗口的标志。如果已经有同名窗口,则该函数什么也不干。
Flags:CV_WINDOW_AUTOSIZE ,会根据图像大小自动调整窗口大小。如果是0,则窗口大小不变。
(3)cvShowImage
函数原型:void cvShowImage( const char* name, const CvArr* image );
name:窗口的标志。这个标志是cvNamedWindow函数设定的。
image:被显示的图像。
功能:函数cvShowImage 在指定窗口中显示图像。如果窗口创建的时候被设定标志CV_WINDOW_AUTOSIZE,那么图像将以原始尺寸显示; 否则,图像将被伸缩以适合窗口大小
(4)cvWaitKey
Int cvWaitKey(int key)
Key:如果key的值是大于0的数,那么该函数的功能是,在此处暂停key毫秒。如果是小于等于0的数,那么,该函数是在等待用户的按键输入。
(5)cvReleaseImage(IplImage** src) 释放图像空间。例:cvReleaseImage(&src);
(6) cvDestroyWindow(char* name)
注销一个窗口。同时释放为该窗口所分配的所有内存(包括窗口内部的图像内存缓冲区)
【运行结果】