真正开始学习OpenCV的操作之前,我们先来打个地基。
OpenCV最重要的操作就是操作图片了,那我们如何把图片加载到我们的程序里来呢?那就是需要一个容器和一个函数了。在介绍它们之前,我们先看一段例程:
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgcodecs/legacy/constants_c.h>
using namespace cv;
using namespace std;
int main()
{
Mat image;
image = imread("D:\\ss.jpg",CV_LOAD_IMAGE_COLOR);
if(image.empty())
{
cout << "Could not open or find the image"<< std::endl;
return-1;
}
namedWindow("Display window",CV_WINDOW_AUTOSIZE)
imshow("Display window", image);
waitKey(0);
std::cout << "Hello World!\n";
}
好了,我们一部分一部分的看。
一,五个include,前两个就像是固定搭配,我们可以理解成必须添加的,一个是管着输入输出的,一个是核心类库。而剩下的那些都是程序里出现的一些函数或者参数必须添加的,要不然程序找不到。
二,我们的两个using namespace,它们的作用就是让我们的程序活动在cv和std两个命名空间下,以节省我们调用函数时每一个都要加前缀(就像最后一句std::cout << "Hello World!\n"; 其实前面的std::完全可以省略)。
三,下面就是我们的主函数main了,我想有C++基础的同学都能看懂这个头。下面我们就主要看里面的函数了。
在我们要加载图片进来之前,要先给它分配一块空间,这就要用Mat来定义一个对象了。对象定义好后,怎么把图片加载进来呢,就要用imread来操作了。
Mat image;
image = imread("D:\\ss.jpg",CV_LOAD_IMAGE_COLOR);
这里的参数CV_LOAD_IMAGE_COLOR表示图片加载时用RGB颜色格式,当然了,它还可以替换成其他两种参数:
CV_LOAD_IMAGE_UNCHANGED 以原始图像读取(包括alpha通道)
CV_LOAD_IMAGE_GRAYSCALE 以灰度图像读取
这两种颜色格式,后面学习中肯定会碰到的,现在了解一下就可以了。
再后面是一个判断,如果图片加载进来是空,参提示错误。
好了,图片加载进来了,怎么显示出来让人看呢,就要用到窗口了。我们先用namedWindow定义一个窗口,再用imshow将刚才加载进来的图片放到窗口中显示就可以了。
namedWindow("Display window",CV_WINDOW_AUTOSIZE)
imshow("Display window", image);
这里的"Display window"是窗口名。如果我们不用QT开发,CV_WINDOW_AUTOSIZE参数是必须的。
waitKey(0);是表示我们关闭控制台窗口时,用敲键的方式。
最后有一个控制台的输出“Hello World!”结束。