• opencv学习笔记(四)


    ROI---设定感兴趣的区域(region of interest)

    定义:

    Mat imageROI;  
    //方法一:通过Rect指定矩形区域 
    imageROI=image(Rect(500,250,logo.cols,logo.rows))
    //方法二  指定感兴趣行或列的范围(Range)
    imageROI=srcImage3(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols));  
    

    利用ROI将一幅图加到另一幅图的指定位置

    bool ROI_AddImage()  
    {  
           //【1】读入图像  
           Mat srcImage1= imread("1.jpg");  
           Mat logoImage= imread("2.jpg");  
           if(!srcImage1.data ) { printf("读取srcImage1错误~! 
    "); return false; }  
           if(!logoImage.data ) { printf("读取logoImage错误~! 
    "); return false; }  
       
           //【2】定义一个Mat类型并给其设定ROI区域  
           Mat imageROI= srcImage1(Rect(200,250,logoImage.cols,logoImage.rows));  
       
           //【3】加载掩模(必须是灰度图)  
           Mat mask= imread("2.jpg",0);  
       
           //【4】将掩膜拷贝到ROI  
           logoImage.copyTo(imageROI,mask);  
       
           //【5】显示结果  
           namedWindow("<1>利用ROI实现图像叠加示例窗口");  
           imshow("<1>利用ROI实现图像叠加示例窗口",srcImage1);  
     
           return true;  
    }  
    

    初级图像混合——线性混合操作

    公式:

    实现函数:addWeighted函数

    void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);
    
    • dst = src1[I]*alpha+ src2[I]*beta + gamma;
    bool LinearBlending()  
    {  
           //【0】定义一些局部变量  
           double alphaValue = 0.5;  
           double betaValue;  
           Mat srcImage2, srcImage3, dstImage;  
       
           //【1】读取图像 ( 两幅图片需为同样的类型和尺寸 )  
           srcImage2= imread("mogu.jpg");  
           srcImage3= imread("rain.jpg");  
       
           if(!srcImage2.data ) { printf("你妹,读取srcImage2错误~! 
    "); return false; }  
           if(!srcImage3.data ) { printf("你妹,读取srcImage3错误~! 
    "); return false; }  
       
           //【2】做图像混合加权操作  
           betaValue= ( 1.0 - alphaValue );  
           addWeighted(srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage);  
       
           //【3】创建并显示原图窗口  
           namedWindow("<2>线性混合示例窗口【原图】 by浅墨", 1);  
           imshow("<2>线性混合示例窗口【原图】 by浅墨", srcImage2 );  
       
           namedWindow("<3>线性混合示例窗口【效果图】 by浅墨", 1);  
           imshow("<3>线性混合示例窗口【效果图】 by浅墨", dstImage );  
       
           return true;  
            
    } 
    

    分离颜色通道

    • split函数---将一个多通道数组分离成几个单通道数组

      void split(const Mat& src, Mat*mvbegin);  
      void split(InputArray m,OutputArrayOfArrays mv);  
      //第一个参数,InputArray类型的m或者const Mat&类型的src,填我们需要进行分离的多通道数组。
      //第二个参数,OutputArrayOfArrays类型的mv,填函数的输出数组或者输出的vector容器。
      
    • merge函数---将多个数组组合合并成一个多通道的数组。

      它通过组合一些给定的单通道数组,将这些孤立的单通道数组合并成一个多通道的数组,从而创建出一个由多个单通道阵列组成的多通道阵列

      void merge(const Mat* mv, size_tcount, OutputArray dst)  	   
      void (InputArrayOfArrays mv,OutputArray dst)
      

    创建轨迹条——createTrackbar函数

    int createTrackbar(conststring& trackbarname, conststring& winname,
     int* value, int count, TrackbarCallback onChange=0,void* userdata=0); 
     //创建轨迹条  
    createTrackbar("对比度:", "【效果图窗口】",&g_nContrastValue,  
    300,ContrastAndBright );// g_nContrastValue为全局的整型变量,ContrastAndBright为回调函数的函数名(即指向函数地址的指针) 
    

    获取当前轨迹条的位置——getTrackbarPos函数

    int getTrackbarPos(conststring& trackbarname, conststring& winname);  
    
  • 相关阅读:
    php 构造函数支持不同个数参数的方法
    浅谈管理系统操作日志设计(附操作日志类)
    PHP 远程文件下载的进度条实现
    PHP处理大文件下载
    c语言线性表
    c语言题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点
    c语言:从一组数据中选出可以组成三角形并且周长最长的三个数(简单)
    关于Staruml与powerdesigner启动使用中的问题
    Win7下安装Apache+PHP+MySQL
    <转>java编译问题:使用了未经检查或不安全的操作
  • 原文地址:https://www.cnblogs.com/mysteryhjj/p/6542331.html
Copyright © 2020-2023  润新知