opencv初学

来源:互联网 发布:传奇归来网络传输异常 编辑:程序博客网 时间:2024/05/17 08:34

自今天开始学习OpenCV。

先了解一下OpenCV这个开源库。OpenCV全称:Open Source For Computer Vision Library,它是一个跨平台的计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它的应用领域有图像处理、视频处理、人脸识别、运动跟踪、机器视觉等等,在以后的工作和学习中必然会长期与它打交道。所以,学好opencv对于我以后的工作能起到事半功倍的效果。

第一个程序

对于我来说,学习opencv主要就是用来对视频图像的处理,所以,必要学会图像的读入、显示、存储,以及对图像矩阵的一系列操作。所以第一个程序就从读取图像开始。

读取图像文件,opencv中有两种方式。一种采用IplImage* 和cvLoadImg,还有一种是采用cv::Mat和cv::imread。两种方式有明显区别,前者取自C的函数库,后者是C++的对象读取。在网上搜了一下,前者需要随时注意内存泄露问题,建议是不到万不得已,还是用C++好。果断放弃第一个,采用第二个。自此始,以后多用C++的库。第一个程序,附上代码:

#include "StdAfx.h"
#include <iostream>
#include <fstream>
#include <opencv2\opencv.hpp>
#include <time.h>


using namespace cv;
using namespace std;


int main(int argc, char* argv[])
{
Mat image;
image = imread("E:\\a.jpg");
imshow("源图像",image);
waitKey(0);
Mat subimage = Mat(image,Rect(image.cols/2,image.rows/2,image.cols/2,image.rows/2));
imshow("子图像",subimage);
waitKey(0);
}

代码执行后显示两个图像,第一个图像为a.jpg,第二个图像是第一个图像的右下角四分之一。

代码中需要加入waitKey(0),要不然图像看不到。Mat的构造函数可以用来截取子图像。


原创粉丝点击