• [转]Opencv 图片ROI与图片融合


    Opencv 图片ROI与图片融合  

    转:http://klqulei23.blog.163.com/blog/static/1323153372013102021740641/

    addWeighted : http://blog.csdn.net/gujiligujili/article/details/7650523 
     
     背景:做项目时候导师希望设置图像ROI,然后将处理的结果合并到原图像上,这里面有两个问题
    (1)如何ROI
    (2)如何融合
    不说别的,上代码:

    #include <iostream>
    #include <vector>
    #include <opencv2/opencv.hpp>
    using namespace cv;
    int main()
    {
    //namedWindow("main");
    Mat srcImage = imread("../opencv_ROI_test/test.jpg");
    Mat intrImage= imread("../opencv_ROI_test/2x2.png");

    // 保存一个ROI图像区域
    cv::Mat roiImage;

    cv::Rect rect(0, 0, intrImage.cols, intrImage.rows);

    //srcImage(rect).copyTo(roiImage);//重新分配内存,如果矩阵roiImage的大小或数据类型与srcImage(rect)不一样,那么在copyTo函数内部会先给imageROI重新分配内存

    roiImage=srcImage(rect);//不重新分配内存,公用内存

    cv::addWeighted(roiImage,1.0,intrImage,0.3,0.,roiImage); //intrImage(rect).copyTo(srcImage(rect));
    cv::imshow("main", srcImage);
    cv::imshow("roi", roiImage);
    cv::imshow("intr", intrImage);

    cv::waitKey(0);


    return 0;
    }

    这里有必要说一下:


    //srcImage(rect).copyTo(roiImage);//重新分配内存,如果矩阵roiImage的大小或数据类型与srcImage(rect)不一样,那么在copyTo函数内部会先给imageROI重新分配内存

    roiImage=srcImage(rect);//不重新分配内存,公用内存

    主要是区别一下上面两行的不同,前者是重新分配内存(copyTo不一定重新分配内存哦!一定要注意,因为在复杂的程序中这影响释放内存问题),后者一定是公用内存!

    srcImage(rect).copyTo(roiImage);

    的结果如下(由于重新分配内存,所以原图srcImage没有变化):
    Opencv 图片ROI与图片融合 - 小影不爱睡 - 影 的博客
     

    roiImage=srcImage(rect);

    的结果如下(由于公有内存,所以原图srcImage也变化):
    Opencv 图片ROI与图片融合 - 小影不爱睡 - 影 的博客
     
  • 相关阅读:
    局部测试用例,日常笔记
    软件测试工程师素养(日常笔记)
    Java控件(日常笔记)
    开发大体流程
    sort学习 LeetCode #406 Queue Reconstruction by Height
    MySQL 变量
    [转帖]查看结构体成员的大小和偏移地址的方法
    [转帖]SQL99
    static静态类 静态函数 静态字段
    默认构造函数
  • 原文地址:https://www.cnblogs.com/Crysaty/p/6549307.html
Copyright © 2020-2023  润新知