我在做一个图像识别的程序,目的是将原图像轮廓识别出来后叠加在原图像上,我将识别出的轮廓图中白色变红了但随之而来的是原图是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
报错:两个图像矩阵大小不一致
就是单纯的把他们叠起来,最好能只叠红线(轮廓)
需要都改到(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;
}