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

    xiaoxiao2023-10-22  144

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

    自给自足嘛!

    #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #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 <iostream> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #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

    最新回复(0)