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

posted @ 2018-10-29 22:04  爱学英语的程序媛  阅读(147)  评论(0编辑  收藏  举报