82641


pythonで、OpenCVを使って画像を合成（重ね合わせ）したいと思っています。

**実行環境:**  
Python 3.8.8  
OpenCV 4.5.3

以下にソースの抜粋を転記します。

[code]

    def PictureAdd_a_lot_of_face():
        StrtPos_x = 10
        StrtPos_y = 10
    
        img1 = cv2.imread(Path1)
        img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
    
        img2 = cv2.imread(Path2)
        img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
    
        x = 10
        y = 25
    
        print('img2----->', img2.shape)
        print('img1----->', img1.shape)
        img2[StrtPos_y: y + StrtPos_y, StrtPos_x: x + StrtPos_x] = img1
    
[/code]

上記のソースを実行すると、末尾の `img2[省略] = img1`
のところで、下記のようなエラーが出ています。エラーメッセージの後に、print文の出力がありました。

このエラーはどういう意味なのでしょうか？また、`shape (25,10,3)` というのが何を意味するのかも不明です。

[code]

    ValueError: could not broadcast input array from shape (150,150,3) into shape (25,10,3)
    img2-----> (500, 700, 3)
    img1-----> (150, 150, 3)
    
[/code]

よろしくお願いいたします。


CC BY-SA 4.0
2021-09-22T08:40:12.913
82639
2021-09-22T12:46:41.740
2021-09-22T09:16:49.663
3060
43160
question
python opencv
エラーの意味が分かりません。どういう意味なのでしょうか？


> ValueError: could not broadcast input array from shape (150,150,3) into
> shape (25,10,3)

配列のサイズが不一致という意味です。（正確にはブロードキャスト出来ないというエラーです）  
`img2[StrtPos_y: y + StrtPos_y, StrtPos_x: x +
StrtPos_x]`のサイズが(25,10,3)で、`img1`のサイズが(150,150,3)です。

`img2[StrtPos_x:StrtPos_x + img1.shape[0], StrtPos_y:StrtPos_y +
img1.shape[1]] = img1`でimg2の左上部分にimg1を合成出来るかと思います。


CC BY-SA 4.0
2021-09-22T12:46:41.740
82641
2021-09-22T12:46:41.740
39819
82639
answer