zoukankan      html  css  js  c++  java
  • opencv基本操作

    src.convertTo(dst, type, scale, shift)

    缩放并转换到另外一种数据类型:

    dst:目的矩阵

    type:需要的输出矩阵类型,或者更明确的,是输出矩阵的深度,如果是负值(常用-1)则输出矩阵和输入矩阵类型相同

    scale和shift:缩放参数,也可以写为alpha和beta

    这个命令也等价于下面的转换公式:

    m(x,y) = saturate_cast(α(*this)(x,y)+β)

    src.copyTo(dst)

    src矩阵中的数据拷贝到dst。

    为什么有些图像在显示前要除以255?

    imshow是用来显示图片的,如
    >> I = imread('moon.tif');
    >> figure.imshow(I);
    而有时为了数据处理,要把读取的图片信息转化为更高的精度,
    >> I = double(imread('moon.tif'));
    为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型。如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。
    有两个解决方法:
    1> imshow(I/256); -----------将图像矩阵转化到0-1之间
    2> imshow(I,[]); -----------自动调整数据的范围以便于显示.
    从实验结果看两种方法都解决了问题,但是从显示的图像看,第二种方法显示的图像明暗黑白对比的强烈些!

    读入图片imread()

    Mat imread( const string& filename, int flags=1 );

    第一个参数 filename,const string&类型的filename,填我们需要载入的图片路径名。

    flags : 指定加载图像的颜色类型,默认载入三通道彩色图像.

    可以在OpenCV中标识图像格式的枚举体中取值。通过转到定义,我们可以在higui_c.h中发现这个枚举的定义是这样的:

    enum
    
    {
    
    /* 8bit, color or not */
    
       CV_LOAD_IMAGE_UNCHANGED  =-1,
    
    /* 8bit, gray */
    
       CV_LOAD_IMAGE_GRAYSCALE  =0,
    
    /* ?, color */
    
       CV_LOAD_IMAGE_COLOR      =1,
    
    /* any depth, ? */
    
       CV_LOAD_IMAGE_ANYDEPTH   =2,
    
    /* ?, any color */
    
       CV_LOAD_IMAGE_ANYCOLOR   =4
    
    };
    • 如果取int类型
      • flags>0,三通道彩色图
      • flags=0,灰度图
      • flags<0,包含Alpha通道的图像

    图像储存顺序:BGR

  • 相关阅读:
    css
    page
    Process Array
    multiprocessing
    page
    mid
    防御 CSRF
    django 常用过滤器
    template
    Android学习笔记28-对话框Dialog控件的使用
  • 原文地址:https://www.cnblogs.com/Bella2017/p/9873657.html
Copyright © 2011-2022 走看看