美文网首页
第一个OpenCV程序的说明

第一个OpenCV程序的说明

作者: smallpi | 来源:发表于2016-06-12 11:53 被阅读313次

    在上一节的OpenCV简介和配置中,我们写了第一个OpenCV程序,加载了一张图片并进行显示。下面先给出上一节的第一个OpenCV程序并进行说明。

    // OpenCVTest.cpp : 定义控制台应用程序的入口点。
    
    #include "stdafx.h"
    #include <opencv2/opencv.hpp>
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        cv::Mat img = cv::imread("J:\\VS2010Projects\\OpenCVTest\\OpenCVTest\\smallpi.jpg");
        cv::imshow("hello world",img);
        cv::waitKey(0);
        
        return 0;
    }
    

    cv::imread函数

    命名空间cv下的函数imread的原型为

    Mat imread(const string& filename, int flags)

    • 函数返回一个Mat类型的对象。
    • 第一个参数指定图片的路径。
    • 第二个参数指定图片加载格式。
      第二个参数flags可以为下面三个中的一个。

    CV_LOAD_IMAGE_UNCHANGED (以RGBA格式加载,一个像素占4byte内存)
    CV_LOAD_IMAGE_GRAYSCALE (以灰度图像的格式加载,一个像素占1byte内存)
    CV_LOAD_IMAGE_COLOR (以RGB格式加载,一个像素占3byte内存)

    CV_LOAD_IMAGE_COLOR 是默认的图片加载格式。

    Mat类

    cv::imread函数读取图片后的就返回一个Mat类型的对象。Mat类对象保存着所加载图片的信息。

    • Mat类的data属性为指向图像数值数组的第一个元素的unsigned char类型的指针。每一个矩阵元素为1byte的0~255的整数。
    • 当为RGB格式加载图像时,图像数值数组的格式为 B值-G值-R值-B值......, 即数值数组的第一个元素为第一个像素的蓝色值, 数值数组的第二个元素为第一个像素的绿色值,数值数组的第三个元素为第一个像素的红色值....
    • Mat类的rows()方法获得图像像素的行数,cols()方法获得图像像素的列数。

    Mat类还有许多有用的属性和方法,以后用到时再作说明。

    cm::imshow函数

    cm::imshow函数的原型为

    void imshow(const string &winname, cv::InputArray mat);

    • 第一个参数指定应用程序的名称。
    • 第二个参数为一个Mat类型的对象。

    cm:; waitKey函数

    waitKey在这里的作用是等待用户键盘或鼠标的输入,使得应用程序不会闪一下就退出了。

    头文件引入

    上面的OpenCV程序引入头文件的形式如下

    #include <opencv2/opencv.hpp>

    实际上,opencv.hpp文件的作用就是帮我们把所有的OpenCV头文件引入进来。opencv.hpp的源码如下。

    #ifndef __OPENCV_ALL_HPP__
    #define __OPENCV_ALL_HPP__
    
    #include "opencv2/core/core_c.h"
    #include "opencv2/core/core.hpp"
    #include "opencv2/flann/miniflann.hpp"
    #include "opencv2/imgproc/imgproc_c.h"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/photo/photo.hpp"
    #include "opencv2/video/video.hpp"
    #include "opencv2/features2d/features2d.hpp"
    #include "opencv2/objdetect/objdetect.hpp"
    #include "opencv2/calib3d/calib3d.hpp"
    #include "opencv2/ml/ml.hpp"
    #include "opencv2/highgui/highgui_c.h"
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/contrib/contrib.hpp"
    
    #endif
    

    这是一种头文件引入时偷懒的作法。引入所有的文件可能会增加程序的大小。

    小结

    • 对第一个OpenCV程序中的imread、imshow、waitKey函数进行的小小的说明。
    • 说明了OpenCV库的引入方式。

    相关文章

      网友评论

          本文标题:第一个OpenCV程序的说明

          本文链接:https://www.haomeiwen.com/subject/cokedttx.html