• Open CV初学(一)


    一、图片的读入与写出

    (1)imread(src,int flag);其中,src为读取图片存放的路径,flag为对图片的灰度设置,可取如下值:

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

    (2)imread(imagename,image);其中,src为读取图片存放的路径,flag为对图片的灰度设置,可取如下值:
    imshow("【3】logo图",logo);
    (3)通道分离,split(srcImage,channels);其中srcImage为处理图片对象,Channels为分离的三通道;
    (4)通道分离后各分离颜色的 ,imageBlueChannel=channels.at(0); //分离蓝色通道
    (5)对图像进行加权叠加处理;addWeighted(imageBlueChannel(Rect(0,0,logoImage.cols,logoImage.rows)),0.5,logoImage,0.5,0.,
    imageBlueChannel(Rect(0,0,logoImage.cols,logoImage.rows))); 
    1. void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);  
    • 第一个参数,InputArray类型的src1,表示需要加权的第一个数组,常常填一个Mat。
    • 第二个参数,alpha,表示第一个数组的权重
    • src2,表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数
    • 第四个参数,beta,表示第二个数组的权重值
    • 第五个参数,dst,输出的数组,它和输入的两个数组拥有相同的尺寸和通道数。
    • 第七个参数,dtype,输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()


    (6)分离后的通道在与图片进行混合处理,merge(channels,srcImage); 
    (7)重设图片大小;resize(srcImage,sizeImage1,Size(950,600),0,0,CV_INTER_LINEAR);其中把srcImage图片的大小设置为950*600,
    处理完后赋值给sizeImage1;

    (8)案例

    bool MultichannelBlending()
    {
    Mat srcImage;   //定义变量
    Mat logoImage;
    vector<Mat>channels;  //定义通道Mat结构数组
    Mat imageBlueChannel;
    Mat sizeImage1;
    logoImage=imread("D:\program files\opencvtest\opencvtest1\pic\hualogo.jpg",0);  //载入图片,并赋值给logoImage,其中第二个参数使用三通道时不可省
    srcImage=imread("D:\program files\opencvtest\opencvtest1\pic\huage.jpg");     //载入图片,并赋值给srcImage
    if(!logoImage.data ) { printf("Oh,no,读取logoImage错误~!
    "); return false; }
    if(!srcImage.data){printf("oh, no,读取srcImage错误1~");}
    split(srcImage,channels);//分离色彩通道 ,把一个3通道图像转换成3个单通道图像   
    imageBlueChannel=channels.at(0); //分离蓝色通道
    addWeighted(imageBlueChannel(Rect(0,0,logoImage.cols,logoImage.rows)),0.5,logoImage,0.5,0.,imageBlueChannel(Rect(0,0,logoImage.cols,logoImage.rows)));  
    merge(channels,srcImage);  
    resize(srcImage,sizeImage1,Size(950,600),0,0,CV_INTER_LINEAR);  //重设图片大小并赋值给sizeImage1
    namedWindow("华哥美照+logo蓝色通道 by tina");  
    imshow("华哥美照+logo蓝色通道 by tina",sizeImage1);  
    Mat  imageGreenChannel;    
    logoImage=imread("D:\program files\opencvtest\opencvtest1\pic\hualogo.jpg",0);  
    srcImage=imread("D:\program files\opencvtest\opencvtest1\pic\huage.jpg");  
    if(!logoImage.data ) { printf("Oh,no,读取logoImage错误~!
    "); return false; }  
    if(!srcImage.data ) { printf("Oh,no,读取srcImage错误~!
    "); return false; }  
    split(srcImage,channels);//分离色彩通道    
    imageGreenChannel=channels.at(1);    //分离green
    addWeighted(imageGreenChannel(Rect(0,0,logoImage.cols,logoImage.rows)),0.0,logoImage,0.5,0.,imageGreenChannel(Rect(0,0,logoImage.cols,logoImage.rows)));    
    merge(channels,srcImage);  
    resize(srcImage,sizeImage1,Size(950,600),0,0,CV_INTER_LINEAR);
    namedWindow("华哥美照+logo绿色通道 by tina");  
    imshow("华哥美照+logo绿色通道 by tina",sizeImage1);  
    Mat  imageRedChannel;  
    logoImage=imread("D:\program files\opencvtest\opencvtest1\pic\hualogo.jpg",0);  
    srcImage=imread("D:\program files\opencvtest\opencvtest1\pic\huage.jpg");  
    if(!logoImage.data ) { printf("Oh,no,读取logoImage错误~!
    "); return false; }  
    if(!srcImage.data ) { printf("Oh,no,读取srcImage错误~!
    "); return false; }   
    split(srcImage,channels);//分离色彩通道     
    imageRedChannel=channels.at(2);//分离红色通道
    addWeighted(imageRedChannel(Rect(0,0,logoImage.cols,logoImage.rows)),0.0,logoImage,0.5,0.,imageRedChannel(Rect(0,0,logoImage.cols,logoImage.rows)));   
    merge(channels,srcImage); 
    resize(srcImage,sizeImage1,Size(950,600),0,0,CV_INTER_LINEAR);//重设图片大小
    namedWindow("华哥美照+logo红色通道 by tina");  
    imshow("华哥美照+logo红色通道 by tina",sizeImage1);     
    return true;  
    }  
    

    运行结果图:

     

  • 相关阅读:
    nginx重新安装操作
    npm 安装部分模块失败处理
    idea 修改每个变量名都是不同的颜色
    使用 vue-cli-service inspect 来查看一个 Vue CLI 3 项目的 webpack 配置信息(包括:development、production)
    【问题与解决】Github 上传代码报错(error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version)
    Eclipse无法打开 Eclipse MarketPlace的解决办法(版本4.8)
    常见数据结构及基本用法
    并差集
    贪心
    二分and三分
  • 原文地址:https://www.cnblogs.com/tyen0921/p/4836571.html
Copyright © 2020-2023  润新知