質問編集履歴

2

修正しました。

2021/01/05 08:16

投稿

nonnon615
nonnon615

スコア19

test CHANGED
File without changes
test CHANGED
@@ -11,3 +11,147 @@
11
11
  追記です
12
12
 
13
13
  画像サイズはすべて同じとします
14
+
15
+
16
+
17
+ 一枚ずつのプログラムは作成しましたが,透過できずただ重ね合わせただけになってしまいます.
18
+
19
+ ・透過させて重ね合わせる方法
20
+
21
+ ・フォルダ1からtf_0001.jpg~を,フォルダ2からimg0001.png~を取り出し重ね合わせる方法
22
+
23
+ この二つを教えていただきたいです
24
+
25
+
26
+
27
+ コードを記していてただけると、うれしいです
28
+
29
+
30
+
31
+
32
+
33
+ ```
34
+
35
+ import cv2 as cv
36
+
37
+ import numpy as np
38
+
39
+ from PIL import Image
40
+
41
+ import cv2
42
+
43
+
44
+
45
+
46
+
47
+ class CvOverlayImage(object):
48
+
49
+
50
+
51
+ def __init__(self):
52
+
53
+ pass
54
+
55
+
56
+
57
+ @classmethod
58
+
59
+ def overlay(
60
+
61
+ cls,
62
+
63
+ cv_background_image,
64
+
65
+ cv_overlay_image,
66
+
67
+ point,
68
+
69
+ ):
70
+
71
+
72
+
73
+ overlay_height, overlay_width = cv_overlay_image.shape[:2]
74
+
75
+
76
+
77
+ # OpenCV形式の画像をPIL形式に変換(α値含む)
78
+
79
+ # 背景画像
80
+
81
+ cv_rgb_bg_image = cv.cvtColor(cv_background_image, cv.COLOR_BGR2RGB)
82
+
83
+ pil_rgb_bg_image = Image.fromarray(cv_rgb_bg_image)
84
+
85
+ pil_rgba_bg_image = pil_rgb_bg_image.convert('RGBA')
86
+
87
+ # オーバーレイ画像
88
+
89
+ cv_rgb_ol_image = cv.cvtColor(cv_overlay_image, cv.COLOR_BGRA2RGBA)
90
+
91
+ pil_rgb_ol_image = Image.fromarray(cv_rgb_ol_image)
92
+
93
+ pil_rgba_ol_image = pil_rgb_ol_image.convert('RGBA')
94
+
95
+
96
+
97
+ # composite()は同サイズ画像同士が必須のため、合成用画像を用意
98
+
99
+ pil_rgba_bg_temp = Image.new('RGBA', pil_rgba_bg_image.size,
100
+
101
+ (255, 255, 255, 0))
102
+
103
+ # 座標を指定し重ね合わせる
104
+
105
+ pil_rgba_bg_temp.paste(pil_rgba_ol_image, point, pil_rgba_ol_image)
106
+
107
+ result_image = \
108
+
109
+ Image.alpha_composite(pil_rgba_bg_image, pil_rgba_bg_temp)
110
+
111
+
112
+
113
+ # OpenCV形式画像へ変換
114
+
115
+ cv_bgr_result_image = cv.cvtColor(
116
+
117
+ np.asarray(result_image), cv.COLOR_RGBA2BGRA)
118
+
119
+
120
+
121
+ return cv_bgr_result_image
122
+
123
+
124
+
125
+ if __name__ == '__main__':
126
+
127
+ cv_background_image = cv.imread("tf_0001.jpg")
128
+
129
+ cv_overlay_image = cv.imread(
130
+
131
+ "img0001.png",
132
+
133
+ cv.IMREAD_UNCHANGED) # IMREAD_UNCHANGEDを指定しα込みで読み込む
134
+
135
+ cv_overlay_image = cv.resize(cv_overlay_image, (1920, 1080))
136
+
137
+
138
+
139
+ point = (0, 0)
140
+
141
+
142
+
143
+ image = CvOverlayImage.overlay(cv_background_image, cv_overlay_image,
144
+
145
+ point)
146
+
147
+
148
+
149
+ cv.imshow("sample", image)
150
+
151
+ cv2.imwrite('sample.png',image)
152
+
153
+ cv.waitKey(0)
154
+
155
+
156
+
157
+ ```

1

更新

2021/01/05 08:16

投稿

nonnon615
nonnon615

スコア19

test CHANGED
File without changes
test CHANGED
@@ -5,3 +5,9 @@
5
5
  とあったときに,フォルダ1の1とフォルダ2の1、フォルダ1の2とフォルダ2の2という風に重ね合わせることは可能でしょうか?
6
6
 
7
7
  調べても一枚ずつしかやり方がわからないため,可能であればコードを教えていただきたいです.
8
+
9
+
10
+
11
+ 追記です
12
+
13
+ 画像サイズはすべて同じとします