opencv学习笔记——图像的载入、显示和输出

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main()
{
    /* 图像的载入和显示 */
    Mat horo = imread("1.jpg");                 //载入图像到Mat
    namedWindow("【1】动漫图");                  //创建一个窗口
    imshow("【1】动漫图", horo);             //显示窗口

    /* 初级图像混合 */
    //载入图片
    Mat image = imread("fate.jpg");
    Mat logo = imread("lingzhou.jpg");

    //载入后显示
    namedWindow("【2】原画图");
    imshow("【2】原画图", image);

    namedWindow("【3】logo图");
    imshow("【3】logo图", logo);

    //定义一个Mat类型,用于存放图像的ROI
    Mat imageROI;
    imageROI = image(Rect(1000, 400, logo.cols, logo.rows));
    //imageROI = image(Range(400, 400 + logo.rows), Range(1000, 1000 + logo.cols));

    //将logo加到原图上
    addWeighted(imageROI, 0.5, logo, 0.3, 0., imageROI);

    //显示结果
    namedWindow("【4】原画+logo图");
    imshow("【4】原画+logo图", image);

    /* 将一个Mat图像输出到图像文件 */
    //输出一张jpg图片到工程目录下
    imwrite("由imwrite生成的图片.jpg", image);

    waitKey();

    return 0;
}

imread函数
  Mat imread(const string& filename, intflags=1 );
  第二个参数,int类型的flags,为载入标识,它指定一个加载图像的颜色类型。定义如下:

enum  
{  
/* 8bit, color or not */  
   CV_LOAD_IMAGE_UNCHANGED  =-1,          //这个标识在新版本中被废置了,忽略。
/* 8bit, gray */  
   CV_LOAD_IMAGE_GRAYSCALE  =0,           //始终将图像转换成灰度
/* ?, color */  
   CV_LOAD_IMAGE_COLOR      =1,           //总是转换图像到彩色一体,3通道图
/* any depth, ? */  
   CV_LOAD_IMAGE_ANYDEPTH   =2,           //若载入的图像的深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回。
/* ?, any color */  
   CV_LOAD_IMAGE_ANYCOLOR   =4  
};  

  书上说

  • flags >0返回一个3通道的彩色图像。
  • flags =0返回灰度图像。
  • flags <0返回包含Alpha通道的加载的图像。

  但是我在实际测试时,写入不属于枚举值的大于0的值会影响图片尺寸。

addWeighted函数
  void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1)

参数 说明
src1 InputArray类型表示需要加权的第一个数组,常常填一个Mat
alpha 表示第一个数组的权重
src2 表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数
beta 表示第二个数组的权重值
dst 输出的数组,它和输入的两个数组拥有相同的尺寸和通道数
gamma 一个加到权重总和上的标量值
dtype 输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()

  计算公式:dst(I)=src1(I)*alpha+src2(I)*beta+gamma。alpha和beta分别代表两个图像在dst图像中占得比例,实际测试会影响混合区域的透明度。

猜你喜欢

转载自blog.csdn.net/horotororensu/article/details/78419932