【C++】OpenCV借助帮助文档一步一步傻瓜式学习(图片视频显示)

OpenCV借助帮助文档一步一步傻瓜式学习(图片视频显示)多图!

环境介绍

OpenCV用的是最新的4.5.0版本,所有程序都是在linux系统下运行(这不重要,只是环境路径不一样罢了),因为qt拥有强大的跨平台功能,所以采用qmake进行的编译,和cmake的区别就是makelists和.pro文件的格式不同而已。opencv和qt的下载和配置这里不多说了,网上有很多。

图片显示

想要打开一张图片应该用什么函数呢,然后又要包含什么头文件动态链接库呢,如果直接用网上的例子并不能很清晰的知道相关的联系。于是我们要借助官网的帮助文档,选择自己安装的版本即可。
在这里插入图片描述

图像的读取

当打开帮助文档时就能发现,图片的读取和视频的读取。
在这里插入图片描述
我们现在要找图片的读取,所以点进去找函数,找到function这一块
在这里插入图片描述
函数找到了可以具体看看怎么用,以及看看这个函数的具体所需头文件
在这里插入图片描述

通过函数的具体介绍我们知道了,第一个参数是图像文件的路径,第二个参数是默认的图片读取格式(默认为3通道的RGB格式),当然我们可以直接通过修改第二个参数值直接读取为图像的单通道灰度图。
在这里插入图片描述
函数的输出是Mat类型,这个是opencv中的一个类,点击mat继续通过帮助文档去找这个类所属的头文件。
在这里插入图片描述
于是代码有:

#include <opencv2/imgcodecs.hpp>  //imread()函数头文件
#include <opencv2/core/mat.hpp>   //mat图片类头文件
using namespace cv;
int main()
{
    Mat picture = imread("/home/zrq/opencv_build/opencv/samples/data/apple.jpg");
    return 0;
}

到这步图像的已被读取了,别忘了要加上-lopencv_imgcodecs -lopencv_core这两个动态链接库。

图像的输出

像图像的读取一样,查帮助文档,图像的输出是什么,是图形用户界面(gui),我们需要一个窗口来显示这张图片。
在这里插入图片描述
当我们具体看imshow函数的时,在描述中有这么一句话
在这里插入图片描述
函数后面要跟waitkey()函数,不然显示就一闪而过了。(然后动态链接库再加上 -lopencv_highgui)于是代码有:

#include <opencv2/imgcodecs.hpp>  //imread()函数头文件
#include <opencv2/core/mat.hpp>   //mat图片类头文件
#include <opencv2/highgui.hpp>    //imshow()和waitKey()函数头文件
using namespace cv;
int main()
{
    Mat rgbpicture = imread("/home/zrq/opencv_build/opencv/samples/data/apple.jpg");
    Mat graypicture = imread("/home/zrq/opencv_build/opencv/samples/data/apple.jpg",IMREAD_GRAYSCALE);
    imshow("输出原图",rgbpicture);
    imshow("输出灰度图",graypicture);
    waitKey();
    return 0;
}

输出
在这里插入图片描述

视屏显示

视频读取

类似的图像的读取一样,我们借助帮助文档,去找要用什么函数
在这里插入图片描述
我们发现所要的函数是一个类,那么视频的读取可以用过类创建对象,用open函数实现视频的读取,也可以直接利用类的构造函数。
添加头文件和动态链接库,于是代码有:

#include <opencv2/highgui.hpp>    //imshow()和waitKey()函数头文件
using namespace cv;
int main()
{
    //VideoCapture capture("/home/zrq/opencv_build/opencv/samples/data/Megamind.avi");
    VideoCapture capture;
    capture.open("/home/zrq/opencv_build/opencv/samples/data/Megamind.avi");
    return 0;
}

视频输出

经过gui的查询,里面并没有发现视频的输出,那么就要想到,视频是由一帧一帧图像所构成的,所以在输出时可以由连续的图像输出就是视频的输出,于是我们可以到帮助文档中去查有没有关于将视频信息读取为图像信息的函数。
在这里插入图片描述
于是代码有:

#include <opencv2/core/mat.hpp>    //Mat类的头文件
#include <opencv2/videoio.hpp>     //VideoCaptrue类的头文件
#include <opencv2/highgui.hpp>    //imshow()和waitKey()函数头文件
using namespace cv;
int main()
{
    //VideoCapture capture("/home/zrq/opencv_build/opencv/samples/data/Megamind.avi");
    VideoCapture capture;
    capture.open("/home/zrq/opencv_build/opencv/samples/data/Megamind.avi");
    while(capture.grab()){
        Mat frame;
        //capture >> frame;
        capture.read(frame);
        imshow("输出", frame);
        waitKey(30);
    }
    return 0;
}

结果
在这里插入图片描述

以上所有图片和视频都采用的opencv自带的例程中的图片和视频,在相应位置可以找到。
可以发现,想要实现什么功能,直接查帮助文档,也没有那么繁琐,写多了就会了,而且也能学到很多,关于函数的头文件,动态链接库,很多功能也能用不同的方式来实现。

如有错误,欢迎指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值