第2章 OpenCV入门

OpenCV的结构和内容

OpenCV主体分为五个模块:

  • CV模块:包含基本的图像处理函数和高级的计算机视觉算法。
  • ML库:机器学习库,包含一些基于统计的分类和聚类工具。
  • HighGUI:包含图像和视频输入/输出的函数。
  • CXCore:包含OpenCV的一些基本数据结构和相关函数。
  • CvAux模块:存放一些即将被淘汰的算法和函数。

显示图像

1
2
3
4
5
6
7
8
9
10
11
#include "opencv/cv.h"
#include "opencv/highgui.h"

int main() {
IplImage *img = cvLoadImage("./Lena.jpg");
cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);
cvShowImage("Example1", img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("Example1");
}

cvLoadImage()函数可读取绝大多数格式类型的图像文件,包括BMP,DIB,JPEG,JPE,PNG,PBM,TIFF等。该函数执行后返回一个指针,此指针指向一块为描述该图像文件的数据结构(IplImage)而分配的内存块。

简单的变换

实现变换的方式:新建一个IplImage结构,然后对原图执行某种操作,将结构写入到新建的结构中,返回。
新建IplImage的方式:

1
2
3
4
IplImage* out = cvCreateImage(
cvSize(in->width / 2, in->height / 2),
in->depth,
in->nChannels);

分配新的图像空间时是从旧的图像中读取所需的信息。在OpenCV中,所有的重要的数据都是以数据体的形式实现,并且以数据体指针的形式传递。