我想将子图像复制到更大的图像。假设我有image1和image2,其中image2的大小为600x300,而image1的大小为200x100。我想将image1复制到image2,而image2的其余部分仍然存在。我尝试过这样的事情 -
`back_img = zeros(round(boundary_y),round(boundary_x),3);
back_img = back_img(:,:,:);
[src_y, src_x,~] = size(img1);
back_img(1:src_y, 1:src_x,1:3) = img1(1:src_y, 1:src_x,1:3);
figure; imshow(back_img);`
我有一个黑色背景,我想粘贴我的图像。我得到一个白色的盒子,我的图像必须在那里作为我的结果。我错过了什么?
谢谢!
答案 0 :(得分:2)
主要问题:controller.app
属于班级back_img
,double
属于班级img1
。
显示类uint8
的图像会将double
以上的所有像素显示为白色像素
在1
类中,像素范围是[0,255],当255是白色时。
关注代码:uint8
,将back_img(1:src_y, 1:src_x,1:3) = img1(1:src_y, 1:src_x,1:3);
矩阵放在类(类型)uint8
的矩阵中。
在这种情况下,Matlab规则将double
元素转换为uint8
在double
为imshow(back_img)
时使用back_img
,应用像素范围[0,1](0为黑色,1为白色)。
高于1的像素也是白色的
原始double
图像的几乎所有像素都是1或更高,因此在转换为double之后显示为白色像素。
解决方案:在与uint8
相同的类中创建零矩阵(在您的情况下为类img1
)。
检查以下代码示例:
uint8
答案 1 :(得分:0)
上面代码的问题是背景图像中的零是双倍的,将它们转换为整数(uint8)将修复它。
答案 2 :(得分:-1)
这里有许多令人困惑的事情,但我认为核心问题是
back_img(1:src_y, 1:src_x,1:3) = img1(1:src_y, 1:src_x,1:3);
改为
back_img(1:src_y, 1:src_x,1:3) = img1;
实现黑色填充的更简单方法是:
padarray(A,padsize,padval,direction)