图像处理后格式变了,无法和原图像叠加 怎么办?

问题遇到的现象和发生背景

我在做一个图像识别的程序,目的是将原图像轮廓识别出来后叠加在原图像上,我将识别出的轮廓图中白色变红了但随之而来的是原图是288384的变成了2883843 这就使得imadd无法使用了 想问一下怎么能让这两张图叠加在一起,怎么把他们格式变得一致比如都是288384或2883843?或者有没有代码可以叠两个不一样的图?

问题相关代码,请勿粘贴截图

clear,clc,close all;
file_path = 'D:\image\3kp+3_C001H001S0001';% 图像文件夹路径
save_path='D:\image\3kp+3_C001H001S0001\save';%图像储存路径
img_path_list = dir(fullfile(file_path,'*.jpg'));%获取该文件夹中所有jpg格式的图像
img_num = length(img_path_list);%获取图像总数量
I=cell(1,img_num);
IM_M=cell(1,img_num);
if img_num>0 %有满足条件的图像
for j = 1:img_num %逐一读取图像 (执行img_number次后结束)
image_name = img_path_list(j).name;% 图像名
image=imread(strcat(file_path,'',image_name));%图像读取
I{j}=image;%图像转移给另一个单行矩阵
fprintf('%d %d %s\n',i,j,strcat(file_path,image_name));% 显示正在处理的图像名
BW{j}=edge(I{j},'sobel');%对灰度图像用算子边界识别处理
IM_m{j} = cast(cat(3,zeros(size(BW{j})),BW{j},BW{j}), class(BW{j}));%将轮廓识别后的二值化图片轮廓青蓝
IM_M{j}=1-IM_m{j};%使图片反色
filename = ['D:\image\3kp+3_C001H001S0001\save\save.' num2str(j) '.jpg']; %将文件保存到filename下 黑色字体部分是迭代部分
imwrite(IM_M{j},filename);%保存图片
end
end

img

(原图 I)

img

(轮廓图 IM_M)

运行结果及报错内容

报错:两个图像矩阵大小不一致

我想要达到的结果

就是单纯的把他们叠起来,最好能只叠红线(轮廓)

需要都改到(288,384,3),因为正常图片都是rgb3通道的,然后再执行下面的代码,把原图是src1,轮廓图是src2


//将两张图片进行混合
#include <opencv2/opencv.hpp>
#include <iostream>
 
using namespace cv;
using namespace std;
 
int main(int argc, char const *argv[])
{
    //加载并输出原图,要想混合图片则这两张图片的大小和尺寸必须是一样的
    Mat src1 = imread("src1.jpg");
    Mat src2 = imread("src2.jpg");
    imshow("src2", src2);
    imshow("src1",src1);
    Mat dst;
    //混合两张图片
    if(src2.rows ==src1.rows && src2.cols == src1.cols){
        double alpha = 0.5;
        /**
         * 第一个参数:要混合的第一张图片
         * 第二个参数:第一张图片的透明度
         * 第三个参数:要混合的第二张图片
         * 第四个参数:第三个参数的透明度
         * gamma值
            dst:混合后的输出图像
         *
         * */
        addWeighted(src2,0.3,src1,0.7,0.0,dst);
        imshow("dst",dst);
        waitKey(0);
        return 0;
    }else{
        cout << "图片大小不一致"<<endl;
    }
    return 0;
}