查看: 5627|回復: 10|關注: 0
打印 上一主題 下一主題

奇迹觉醒手游战士攻略: [已解決] matlab如何實現兩張圖片重疊,讓其中一張遮住另一張

[復制鏈接]

新手

7 麥片

財富積分


奇迹觉醒女神之光 www.mhotr.icu 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完全遮住,請問有什么語句能解決


新手

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只有中間一部分是圖像,其它地方都是透明的,我想讓a中間有圖像的地方完全蓋住b,而透明地方自然就是b了(就像PS圖層原理一樣),請問該用什么語句呢?imadd函數不得行

新手

7 麥片

財富積分


050


4

主題

15

帖子

0

最佳答案
5#
 樓主| 發表于 2019-3-2 17:35:03 | 只看該作者
18280124054 發表于 2019-3-2 16:23
重疊部分為255或者1就行

可以麻煩您說得詳細一點嗎?我是新手,感謝:D

入門

99 麥片

財富積分


50500


1

主題

71

帖子

8

最佳答案
  • 關注者: 1
6#
發表于 2019-3-2 19:08:08 | 只看該作者
小媚_aQ27Y 發表于 2019-3-2 17:35
可以麻煩您說得詳細一點嗎?我是新手,感謝

AB大小一樣就好辦了;

你把A透明部分輸出一下看是RGB值都是255還是都是0;

假設都是0吧,A是RGB圖:

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

Acenter=A(A>0); %A中間部分
Anone=A(A==0); %A透明部分

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

思路就這樣,你自己搜一下 “MATLAB的矩陣以邏輯數組作為索引” 看明白中間兩句代碼是什么意思就行了。
有一點,AB是RGB圖,所以第顏色[r g b]都為0才是透明的話,你就用分開寫就行了,防止誤刪。

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透明部分輸出一下看是RGB值都是255還是都是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)那一行不對,我看了邏輯索引、數組索引,感覺邏輯上沒有問題啊,請問是哪里有問題 ...

周末沒來辦公室;

1、你先輸出A的一部分A(1:5,1:5,:)看看透明部分是什么樣的,再設置判定透明的條件。

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比邏輯值多了一個維度;

啊啊啊……不理解了。我能不能把圖片發您郵箱看看呀?
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

關閉

站長推薦上一條 /3 下一條

快速回復 奇迹觉醒女神之光 返回列表