赌场送彩金35|临海赌场看场子
查看: 3155|回复: 10|关注: 0
打印 上一主题 下一主题

[已解决] matlab如何实现两张图片重叠,让其中一张遮住另一张

[复制链接]

新手

7 麦片

财富积分


050


4

主题

15

帖子

0

最佳答案
matlab如何实现两张图片重叠,让其中一张遮住另一张
比如我有2张图片,尺寸大小相同,1.jpg中有个建筑,2.jpg有背景,
       a=imread('1.jpg');
       b=imread('2.jpg');
用    c=imadd(a,b); 就是让两张图片加叠在一起了,a并没有把b遮住。
但是我想要的效果是a能把b完全遮住,请问有什?#20174;?#21477;能解决


新手

8 麦片

财富积分


050


0

主题

0

帖子

0

最佳答案
2#
发表于 2019-3-2 15:45:16 | 只看该作者
你说的完全盖住意思是b完全不输出吗?

入门

99 麦片

财富积分


50500


1

主题

71

帖子

8

最佳答案
  • 关注者: 1
3#
发表于 2019-3-2 16:23:11 | 只看该作者
重叠部分为255或者1就行

新手

7 麦片

财富积分


050


4

主题

15

帖子

0

最佳答案
4#
 楼主| 发表于 2019-3-2 17:33:43 | 只看该作者
lcl_9595 发表于 2019-3-2 15:45
你说的完全盖住意思是b完全不输出吗?

a的尺寸与b是一样的,但是a只有中间一部分是图像,其它地方都是?#35813;?#30340;,我想让a中间有图像的地方完全盖住b,而?#35813;?#22320;方自然就是b了(就像PS图层原理一样),请问该用什?#20174;?#21477;呢?imadd函数不得行

新手

7 麦片

财富积分


050


4

主题

15

帖子

0

最佳答案
5#
 楼主| 发表于 2019-3-2 17:35:03 | 只看该作者
18280124054 发表于 2019-3-2 16:23
重叠部分为255或者1就行

可以麻烦您说得详细一点吗?#35838;?#26159;新手,?#34892;?D

入门

99 麦片

财富积分


50500


1

主题

71

帖子

8

最佳答案
  • 关注者: 1
6#
发表于 2019-3-2 19:08:08 | 只看该作者
小媚_aQ27Y 发表于 2019-3-2 17:35
可以麻烦您说得详细一点吗?#35838;?#26159;新手,?#34892;?/blockquote>

AB大小一样就好办了;

你把A?#35813;?#37096;分输出一下看是RGB值都是255还?#23884;?#26159;0;

假设都是0吧,A是RGB图:

[Arow,Acol,~]=size(A);
C=zeros(Arow,Acol,3);

Acenter=A(A>0); %A中间部分
Anone=A(A==0); %A?#35813;?#37096;分

C(Acenter)=A(Acenter);
C(Anone)=B(Anone);

思路就这样,你自己搜一下 “MATLAB的矩阵以逻辑数组作为索引” 看明白中间两句代码是什么意思就行了。
有一点,AB是RGB图,所以第颜色[r g b]都为0才是?#35813;?#30340;话,你就用分开写就行了,防止误删。

Anone=A(A(:,:,1)==0) & A(A(:,:,2)==0)  A(A(:,:,3)==0)  ;
Acenter=logical(1-Anone);


新手

7 麦片

财富积分


050


4

主题

15

帖子

0

最佳答案
7#
 楼主| 发表于 2019-3-3 11:42:51 | 只看该作者
18280124054 发表于 2019-3-2 19:08
AB大小一样就好办了;

你把A?#35813;?#37096;分输出一下看是RGB值都是255还?#23884;?#26159;0;

它说C(Anone)=B(Anone)那一行不对,我看了逻辑索引、数组索引,感觉逻辑上没有问题啊,请问是哪里有问题呢?

入门

99 麦片

财富积分


50500


1

主题

71

帖子

8

最佳答案
  • 关注者: 1
8#
发表于 2019-3-4 11:43:33 | 只看该作者
小媚_aQ27Y 发表于 2019-3-3 11:42
它说C(Anone)=B(Anone)那一行不对,我看了逻辑索引、数组索引,感觉逻辑上没有问题啊,请问是哪里有问题 ...

周末没来办公?#36965;?br />
1、你先输出A的一部分A(1:5,1:5,:)看看?#35813;?#37096;分是什么样的,再设?#38376;?#23450;?#35813;?#30340;条件。

2、你查看一下Anone的类型和大小,有没有什么问题
class(Anone)
size(Anone)

入门

99 麦片

财富积分


50500


1

主题

71

帖子

8

最佳答案
  • 关注者: 1
9#
发表于 2019-3-4 12:14:37 | 只看该作者
我试了一下,因为size(A)=[~,~,3];
而size(A>20)=[~,~];
A比逻辑值多了一个维度;
这样MATLAB会把A(A>20)变维一维数组;
所以可以设置一个中间量记录;
sumAB=zeros(128,128,3);
record=zeros(128,128);
Acenter=...;
for i=1:3
    Ai=A(:,:,i);
    record(Acenter)=Ai(Acenter);
    sumAB(:,:,i)=record;
end

Anone同理

新手

7 麦片

财富积分


050


4

主题

15

帖子

0

最佳答案
10#
 楼主| 发表于 2019-3-4 20:15:06 | 只看该作者
18280124054 发表于 2019-3-4 12:14
我试了一下,因为size(A)=[~,~,3];
而size(A>20)=[~,~];
A比逻辑值多了一个维度;

啊啊啊……不理解了。我能不能把图片发您邮箱看看呀?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表
赌场送彩金35 36选7走势图福建 电竞比分数据 华东六省一市15选5走势图 新mg电子游戏手机版 美国恩波利亚大学 第戎vs欧塞尔 时时彩直选技巧 巴塞罗那是哪个国家的 比利亚雷亚尔皇家社会 红色马赛克