【OpenCV】快速入门(一)--第一个程序讲解

1 篇文章 0 订阅
1 篇文章 0 订阅

第一个OpenCV程序

程序

//示例代码1
#include <opencv2/opencv.hpp>
int main() {
    cv::Mat img = cv::imread("../5.jpg");
    if (img.empty()) return -1;
    cv::namedWindow("Example1",cv::WINDOW_AUTOSIZE);
    cv::imshow("Example1",img);
    cv::waitKey(0);
    cv::destroyWindow("Example1");
    return 0;
}

效果

显示文件夹的图片,用户按任意键后关闭
请添加图片描述

代码讲解

头文件

在上方程序中,可以看到包含了文件夹opencv2中的opencv.hpp头文件,
按住Ctrl点击给路径,可以看到其包含各种头文件,因此只需在主程序中
#include <opencv2/opencv.hpp>即可引用大部分OpenCV功能

以下是几个常用文件的解释

#include “opencv2/core/core_c.h”
旧式C风格的结构以及运算

#include “opencv2/core/core.hpp”
新式C++风格的结构以及数学运算

#include “opencv2/flann/miniflann.hpp"
最邻近搜索匹配函数

#include “opencv2/imgproc/imgproc_c.h”
旧式C风格的图像处理函数

#include “opencv2/imgproc/imgproc.hpp”
新式C++风格图像处理函数

#include “opencv2/video/photo.hpp”
操作和恢复照片相关算法

#include “opencv2/video/video.hpp”
视觉追踪以及背景分割

#include"opencv2/features2d/features2d.hpp"
用于追踪的二维特征

#include"opencv2/objdetect/objdetect.hpp"
级联人脸分类器、latent SVM分类器、HoG特征和平面片检测器

#include “opencv2/calib3d/calib3d.hpp”
校准以及双目视觉相关

#include"opencv2/ml/ml.hpp"
机器学习、聚类以及模式识别相关

#include"opencv2/highgui/highgui_c.h"
旧式C风格的显示、滑动条、鼠标操作以及输入输出相关

#include “opencv2/highgui/highgui.hpp”
新式C++风格的显示、滑动条、鼠标操作以及输入输出相关

#include“opencv2/contrib/contrib.hpp"
用户贡献的代码、皮肤检测、模糊Mean-Shift追踪、spin image算法及自相似特征等

尽管包含opencv.hpp可以引用大部分功能,但同时会导致编译速度的降低,因此可以只包含自己用到的功能

函数和变量名

OpenCV的函数都位于cv这个命名空间内,若使用OpenCV的函数,需要在前面加入cv::用来说明你调用的函数是OpenCV里的

使用命名空间这个东西是因为随着模块的增加,防止出现不同模块之间由相同函数或变量名造成的错误

也可以在前面加上 using namespace cv; 表示默认为cv命名空间,如下的示例代码2

#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main() {
    Mat img = imread("../5.jpg");
    if (img.empty()) return -1;
    namedWindow("Example1",WINDOW_AUTOSIZE);
    imshow("Example1",img);
    waitKey(0);
    destroyWindow("Example1");
    return 0;
}

cv::Mat img = cv::imread(“…/5.jpg”);

这一行将会载入图像,imread会根据文件名来处理不同格式的图像,并返回一个cv::Mat结构

if (img.empty()) return -1;

判断是否成功载入图像,如不超过则返回-1并退出程序

cv::namedWindow(“Example1”,cv::WINDOW_AUTOSIZE);

该函数由HighGUI模块提供,创建名为Example1的窗口,该名称相当于窗口的身份证

第二个参数用来赋予窗口特性,可设置为0

cv::imshow(“Example1”,img);

若cv::Mat中有图像结构,可以通过imshow让图像在窗口上显示,若该窗口不存在,则会调用namedWindow创建一个出来

cv::waitKey(0);

给函数会告知系统暂停并等待按键事件,若参数大于0,则是要停止的时间,
若为0或负数则会一直等待知道按键按下

cv::destroyWindow(“Example1”);

销毁指定窗口,同时防止内存泄露,为了简洁可以省略

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值