opencv_study第一篇|opencv的安装及基本操作

(详细)http://blog.csdn.net/gameloong/article/details/18242823

(简便)http://my.phirobot.com/blog/2014-02-opencv_configuration_in_vs.html

(官方文档)http://wiki.opencv.org.cn/index.php/VC_2010%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.4.4

(解决opencv_core249d.dll丢失问题)http://www.cnblogs.com/csulennon/p/3775980.html


读取并显示图片C风格代码:

#include "highgui.h"
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
int main(int argc, char **argv)
{
	IplImage *img = cvLoadImage("pp.jpg");
	cvNamedWindow("Exampel", CV_WINDOW_AUTOSIZE);
	cvShowImage("Exampel", img);
	cvWaitKey(0);
	cvReleaseImage(&img);
	cvDestroyWindow("Exampel");
	return 0;
}
      当以上程序编译后,我们就可以得到一副图像。下面将对以上代码做逐行分析。

IplImage *img=cvLoadImage("pp.jpg");
      该行程序的功能是将图像文件加载至内存。cvLoadImage()函数是一个高层调用接口,它通过文件名确定被加载文件的格式;并且该函数将自动分配图像数据结构所需的内存。需要指出的是,cvLoadImage()函数可读取绝大多数格式类型的图像文件,这些类型包括BMP、DIB、JPEG、JPE、PNG、PBM、PGM、PPM、SR、RAS和TIFF。该函数执行完成后将返回一个指针,此指针指向一块为描述该图像文件的数据结构而分配的内存块。IplImage结构体将是我们在用openCV时会最常用到的数据结构。openCV使用IPlImage结构体处理诸如单通道(single-channel)、多通道(multichannel)、整形的(integer-valued)、浮点型的(floating-point-valued)等所有类型的图像文件。

cvNamedWindow("Exampel",CV_WINDOW_AUTOSIZE);
      cvNamedWindow()函数也是一个高层调用接口,该函数由HighGui库提供。cvNamedWindow()函数用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中。函数的第一个参数指定了该窗口的窗口标题(上例中为“Exampel”),如果要使用HighGUI库所提供的其他函数与该窗口进行交互时,我们将通过该参数值引用这个窗口。函数的第二个参数定义了窗口的属性。该参数可被设置为0(默认值)或(CV_WINDOW_AUTOSIZE),设置为0时,窗口的大小不会因为图像的大小而改变,图像只能在窗口中根据窗口的大小进行拉伸或缩放;而设置CV_WINDOW_AUTOSIZE时,窗口则会根据图像的实际大小自动进行拉伸或缩放,容纳图像。即自动调整大小(autosize)容纳图像。

cvShowImage("Exampel",img);
      只要有一个与某个图像文件相对应的IPlImage*类型的指针,我们就可以在一个已经创建好的窗口(使用cvNamedWindow()函数创建)中使用cvShowImage()函数显示该图像。cvShowImage()函数通过设置其第一个参数确定在哪个已存在的窗口中显示图像。cvShowImage()函数被调用时,该窗口将会被重新绘制,并且图像也会显示在窗口中。如果该窗口在创建时被指定CV_WINDOW_AUTOSIZE标志作为cvNamedWindow()函数的第二个参数,该窗口将根据图像的大小自动跳帧为与图像一致。

cvShowImage("Exampel",img);
      cvWaitKey()函数的功能是使程序暂停,等待用户触发一个按键操作。但如果将函数参数设为一个正数,则程序将暂停一段时间,时间长为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何键。当参数为<=0时,程序将一直等待用户触发按键操作。

cvReleaseImage(&img);
      一旦用完加载到内存的图像,我们就可以释放为该图像文件所分配的内存。通过cvReleaseImage()函数传递一个类型为IplImage*的指针参数调用该函数,用以执行内存释放操作。对cvReleaseImage()函数的调用执行完毕后,img指针将被设置为NULL。

cvDestroyWindow("Exampel");
      最后,可以销毁显示图像文件的窗口。cvDestroyWindow()函数将关闭窗口并同时释放为该窗口所分配的所有内存(包括窗口内部的图像内存缓冲区,该缓冲区中保存了与img指针相关的图像文件像素信息的一个副本)。因为当应用程序的窗口被关闭时,该引用程序窗口所占用的一切资源都会由操作系统自动释放,所以对一些简单的程序,不必调用cvDwstroyWindow()或cvReleaseImage()函数显示释放资源。但是,养成每次都调用这些函数显示释放资源总是有好处的。



 
 读取并显示图片C++风格代码: 
 

#include <opencv2\opencv.hpp>
#include <iostream>
#include <string>
#pragma comment(linker, " /subsystem:\"windows\" /entry:\"mainCRTStartup\" ")
using namespace std;
using namespace cv;
int main()
{
	Mat img = imread("pp.jpg");
	if (img.empty())
	{
		cout << "error!" << endl;
		return -1;
	}
	imshow("pp's photo", img);
	waitKey();
	return 0;
}

 
 


注意:在OpenCV中,函数名与结构体名的前面以cv和Cv为前缀的都是C风格代码 




你可能感兴趣的:(C++,C语言,opencv,图形处理)