导航

OpenCV:初试牛刀-显示图像-1

Posted on 2014-07-20 21:10  ggzone  阅读(135)  评论(0编辑  收藏  举报

OpenCV开发包提供了读取各种类型的图像文件、视频内容以及摄像机输入的功能。这些功能是OpenCV开发包所包含的HighGUI工具集的一部分。

先看两个小例子:

#include"opencv2/highgui/highgui.hpp"

int main()
{
	IplImage* img = cvLoadImage("123.jpg");
	cvNamedWindow("Demo1",CV_WINDOW_AUTOSIZE);
	cvShowImage("Demo1", img);
	
	cvWaitKey(0);
	cvReleaseImage(&img);
	cvDestroyWindow("Demo1");

cvLoadImage()函数是一个高层调用接口,它通过文件名确定被加载文件的格式,并且该函数将自动分配图像数据结构所需的内存。cvLoadImage()函数可读取绝大多数格式类型的图像文件,包括BMP,DIB,JPEG,JPG,PNG,PBM,PGM,PPM,SR,RAS和TIFF。该函数执行完后将返回一个指针,此指针指向一块为描述该图像文件的数据结构(IplImage)而分配的内存块。

cvNamedWindow()第一个参数指定了该窗口的标题,同时也作为该窗口的索引。第二个参数可选0或CV_WINDOW_AUTOSIZE,为0时图像根据窗口大小进行伸缩,为CV_WINDOW_AUTOSIZE时,窗口根据图片大小伸缩。


#include"opencv2/highgui/highgui.hpp"
using namespace cv;

int main()
{
	Mat image = imread("123.jpg");
	imshow("Demo2", image);
	cvWaitKey(0);
}

imread和cvloadimage有什么异同啊?

OpenCV提供C接口和C++接口,功能是一样的。选用何种接口,完全取决于个人爱好。
如果你的程序是C风格的,最好选用C接口,如果是C++风格的,最好选用C++接口。
C接口的很多函数需要配对使用,比如:创建矩阵后需要释放矩阵,相对来说,代码量要大一些,一个不小心就会出现内存泄漏。