opencv将图像指定区域使用另一图像覆盖

Ubuntu、双屏幕、其中一个想用竖屏、想做个好看的壁纸。

自给自足嘛!

 #include 
#include 
#include 
#include 
#include "opencv2/stitching.hpp"
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;


int main()
{
     
    Mat MM(1080, 3341, CV_8UC1, Scalar(0,0,0));
    imwrite("bb.jpg",MM);
    cout<<"Hello"<<endl;

    waitKey(0);
    return 0;
}

先用Mat创建出一张黑色图像做背景图。

#include 
#include 
#include 
#include 
#include "opencv2/stitching.hpp"
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;


int main()
{
     
    //【1】读入两幅图像并检查图像是否读取成功

    Mat image_one = imread("/home/zy/下载/1944992445.jpg");//待拼接左图
    Mat image_two = imread("/home/zy/下载/747707448.jpg");//待拼接右图
    Mat M=imread("/home/zy/下载/asa.jpg");


    if (! image_two.data || !image_one.data)
    {
     
        cout << "读取图像有误,请重新输入正确路径!\n";
        return false;
    }
    imshow("【女人1】", image_one);
    imshow("【女人2】",  image_two);

    //【2】定义一个Mat类型并给其设定ROI区域
    Mat imageROI1 = M(Rect(0,444, image_one.cols, image_one.rows));
    Mat imageROI2=M(Rect(1613,0,image_two.cols,image_two.rows));
    //【3】加载掩模(必须是灰度图)
   Mat mask1 = imread("/home/zy/下载/1944992445.jpg", 0);    //参数0显示为灰度图
     Mat mask2 = imread("/home/zy/下载/747707448.jpg", 0);
    //【4】将掩模复制到ROI
    image_one.copyTo(imageROI1, mask1);
    image_two.copyTo(imageROI2, mask2);
    //【5】显示结果
    namedWindow("利用ROI实现图像叠加");
    imshow("利用ROI实现图像叠加", M);
    imwrite("hhh.jpg",M);

    waitKey(0);
    return 0;
}

关键是copyTo()函数。

接下来,把黑色部分去掉。
我尝试使用了
构造函数 Rect(x,y,width,height),x, y 为左上角坐标, width, height 则为宽和高。
但是失败了。
然后问了师兄,才知道是去不掉的,要在ubutun上搞别的操作。
至于之后的操作,下次再更新咯。
桌面暂时是这样子滴

参考大佬教程:
https://www.cnblogs.com/qiantao/p/9446869.html

你可能感兴趣的:(Ubutun,opencv)