请选择 进入手机版 | 继续访问电脑版
开启左侧

我的人脸识别学习之路(三)——第一个OpenCV程序(一)

[复制链接]
丁旭 发表于 2017-7-21 00:23:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
本帖最后由 丁旭 于 2017-7-21 00:25 编辑

第一个OpenCV程序
如果单纯地介绍OpenCV的知识点,这样既无聊又太多,不知从何讲起,不如我们通过OpenCV实现一个小的demo,来初步认识OpenCV。
第一个程序的功能是这样的,我们可以通过OpenCV来读取一张图片,然后显示在Qt绘制的窗体界面上,这样就完成了OpenCV和Qt的初步结合使用。
首先,我们先明确我们工作的任务,一是读取,另一个是显示。下面我们进行读取的工作,不过在读取之前,需要做一些准备工作。
头文件的选择
我们要使用OpenCV,首先应该包含相关的头文件。一般下面的几个头文件,就可以解决大部分的问题。
  1. #include <opencv2/core/core.hpp>
  2. #include <opencv2/highgui/highgui.hpp>
  3. #include <opencv2/imgproc/imgproc.hpp>
  4. #include <opencv2/objdetect/objdetect.hpp>
  5. #include <opencv2/opencv.hpp>
复制代码
命名空间
使用OpenCV,就像使用C++,需要使用命名空间。
  1. using namespace cv;
复制代码
或者
  1. cv::Mat
复制代码
是不是这很C++。
读取
我们第一步是要读取一张图片,在文件操作中有一个函数read(),类似的在OpenCV中也有一个读取图片的函数cv::imread()。
cv::imread()
函数原型
  1. Mat imread( const String& filename, int flags = IMREAD_COLOR );
复制代码
第一个参数是图片的绝对地址
第二个参数表示图片读入的方式(flags可以缺省,缺省时flags=1,表示以彩色图片方式读入图片)
flags>0时表示以彩色方式读入图片
flags=0时表示以灰度图方式读入图片
flags<0时表示以图片的本来的格式读入图片

我们首先通过函数的返回值来分析这个函数,返回值为Mat,这是OpenCV中的一个类,是使用OpenCV的基础,理解了Mat,第一个程序就完成了一半,所以需要单独介绍。
注意的问题:1、第一个参数的类型是String,不是QString,在Qt上使用一定要注意转换。
         2、第二个参数虽然有缺省值,但是刚开始使用时一定要根据自己的需要填上,这样能避免很多错误。
cv::Mat
Mat是OpenCV最基本的数据结构,Mat即矩阵(Matrix)的缩写,Mat数据结构主要包含2部分:Header和Pointer。Header中主要包含矩阵的大小,存储方式,存储地址等信息;Pointer中存储指向像素值的指针。
从最简单的角度讲,一张矩形数字图片由很多像素点组成,可以通过一个矩阵表示。在这里我们只需要理解我们将一张图片通过OpenCV读入,存入在一个矩阵类Mat的对象中。
  1. cv::Mat image;
  2. image = cv::imread("xx.png",-1);
复制代码
   这样我们就用image表示了这张图片,可以通过操作image就相当于操作读入的图片。 注意的问题:使用Mat类进行复制图片的操作,要使用成员函数clone()或者copyTo(),不能直接使用等号或者括号的形式赋值。

  1. Mat B;  

  2. B = image  // 第一种方式  

  3. Mat C(image); // 第二种方式
复制代码
这两种方式称为浅拷贝,是由于它们有不同的矩阵头,但是它们共享内存空间,即指向一个矩阵。当图像矩阵发生变化时,两者相关联,都会变化。
  1. Mat B,C;  

  2. B = image.clone();       // 第一种方式  

  3. image.copyTo(C); // 第二种方式
复制代码
   这两种方式称为深拷贝,深拷贝是真正的copy了一个新的图像矩阵,此时image,B,C三者相互没有影响。

精彩评论2

李冰旋(真) 发表于 2017-7-23 11:46:14 | 显示全部楼层
flags>0时表示以彩色方式读入图片
flags=0时表示以灰度图方式读入图片
flags<0时表示以图片的本来的格式读入图片

这里我不太懂,彩色方式和图片本来的格式有什么区别吗
...............
卫国辉 发表于 2017-10-9 18:53:28 | 显示全部楼层
                                       四呢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注1

粉丝1

帖子5

发布主题
阅读排行 更多
广告位
0351-8210788
周一至周日 9:00-18:00
意见反馈:mind@unigress.com
关注我们

扫一扫关注我们

Powered by Discuz! X3.4 Licensed  © 2001-2013 Comsenz Inc.( 晋ICP备12005011 )