Opencv (一)

       写在前头:感觉自己学习Opencv的时候总会忘了自己学了什么,希望能够通过写博客来记录一下自己的从小白到小小白的技术成长之路。
       首先介绍一下寄几:漠然と申します

       首先,那啥安装就不讲了,开始第一个入门事例,图像的读取输出以及处理。
       Opencv升级到了2.x甚至3.x的版本,已经抛弃了老版本的IplImage的类型,推出了新宠Mat类。Mat顾名思义就是Matrix的简写,可以用来保存一幅图片的各个像素的值,一幅图片可以有不同的格式,例如jpg、png啥的,彩色的图除了图片二维矩阵之外,每个像素还包括有三个通道,表示计算机三原色的值[0~255],当然灰色的图也就是黑白图片,就只有二维矩阵表示图片,每个像素只有一个通道[0~255]。
       然后先给出一个代码:

#include 
#include 
#include 

using namespace cv;
using namespace std;

int main() {
    Mat mypic = imread("/Users/apathetically/code/C++/opencv/opencv/cat.png");
    if(mypic.empty()) {
        cout << "いいえ" << endl;
        return -1;
    }
    imshow("mypic", mypic);
    waitKey();
    return 0;
}

       然后运行之后的结果为:

Opencv (一)_第1张图片

       当然这个代码能输出图片的前提条件就是imread函数相对地址或者绝对地址中必须有那幅图片,比如说我这儿就是一张萌萌猫的特写。如果没有这张图片依据代码可以看出,运行的时候会输出いいえ。
       这个代码还是比较容易看懂的:
       Mat mypic = imread("...cat.png");
      表示从某个系统位置中读入Mat类型的图片,这时我们可以输出它的shape:
       cout << mypic.rows << " " << mypic.cols << endl;
       在我电脑中这只萌萌猫的图片大小为378*283,所以读取图片的时候,mypic的shape为(378, 283),当然由于这是一张彩图,所以有三个通道,我们输出(0, 0)像素点:
       cout << mypic.at(0, 0) << endl;
       此时我的输出为:

   [189, 194, 205]

       可以看出,当我们访问图像第一个元素的时候,它返回的并不是一个数值,而是一个包含有三个元素的向量,这三个元素的值分别表示红色、绿色、蓝色的值。例如当这个向量为[255, 0, 0]时,这个像素点的颜色就为红色。
       imshow("mypic", mypic);
       这行代码表示将mypic这个矩阵在名为“mypic”的窗口中显示出来。而下面一行代码:
       waitKey();
       表示等待入读一个字符,例如你只需要随机敲打键盘上的一个字母,电脑上所显示出来的图片就会关闭,程序就会运行结束。
       进一步的,如果你能完成这些步骤,就说明你的opencv在C++环境下配置完成啦。
       另外要介绍的就是imread函数的两个参数:

  • 第一个参数,const string&类型的filename,填我们需要载入的图片路径名。
  • 第二个参数,int类型的flags,为载入标识,它指定一个加载图像的颜色类型,它默认是三通道类型。
enum {
    CV_LOAD_IMAGE_UNCHANGED = -1,
    CV_LOAD_IMAGE_GRAYSCALE = 0,
    CV_LOAD_IMAGE_COLOR     = 1,
    CV_LOAD_IMAGE_ANYDEPTH  = 2,
    CV_LOAD_IMAGE_ANYCOLOR  = 4
};

       如果我们在读入一幅图片的时候,人为设置第二参数,结果如下:
       Opencv (一)_第2张图片       Opencv (一)_第3张图片
                         UNCHANGED                                             GRAYSCALE
       Opencv (一)_第4张图片       Opencv (一)_第5张图片
                             COLOR                                                     ANYDEPTH

       可以看出,将imread函数第二个参数依次设置为-1、0、1、2,读入图片形式不同,当参数为0、2的时候,输出的萌萌猫是灰色的。
       第一次正式写博客,markdown啥的都是现学的,排版丑内容简陋还请多多海涵。

                                                                                                                                                 読書ありかとう
                                                                                                                                                      ばくぜん

你可能感兴趣的:(Opencv)