numpyの3次元配列中から特定の1次元配列を検索して変更する方法を知りたい
解決したいこと
numpy/OpenCV初心者です。
うまく説明できなくてごめんなさい…。
まず背景として、以下の流れの処理をしたかった感じです。
・カラー画像から、特定の色を探す(特定の条件の合致する座標を探す)
・見つかった場所の色を、別のカラー画像の色にする
この問題は以下の記事のおかげでなんとか解決しました。
https://qiita.com/Zumwalt/items/fb2e7c20d935803126c7
https://www.it-swarm-ja.tech/ja/python/opencv%E3%83%9E%E3%82%B9%E3%82%AF%E3%82%92%E3%82%AB%E3%83%A9%E3%83%BC%E7%94%BB%E5%83%8F%E3%81%AB%E9%81%A9%E7%94%A8/1067156347/
問題自体はなんとか解決したのですが、タイトルの「3次元配列中から特定の1次元配列を検索して変更する」という方法が全然わからなくて、とてもモヤモヤしています…。
for文以外の方法で、なんとかこれを解決する方法ってないんでしょうか?
超初歩的な質問かもですが、全然わからないのでどなたかよろしくお願いします!
以下に試行錯誤したものの一部を乗せておきます。
とんちんかんなことをしてるかとは思いますが、こういうことがしたい!というのを感じとっていただけたら嬉しいです…。
試行1
# 画像から指定の領域をマスクして返す
def mask_image(cvbase, cvmask) -> numpy.ndarray:
masked = numpy.where(
cvmask != (255,255,255), # 関係ない場所も捕まってしまう(部分一致する)
cvmask,
cvbase
)
return masked
試行2
# 画像から指定の領域をマスクして返す
def mask_image(cvbase, cvmask) -> numpy.ndarray:
masked = numpy.where(
(cvmask != (255,255,255)).all(axis=2), # 完全一致にしたかった
cvmask,
cvbase
) # ValueError になる
return masked
試行3
# 画像から指定の領域をマスクして返す
def mask_image(cvbase, cvmask) -> numpy.ndarray:
cvbase[(cvmask != (255,255,255)).all(axis=2)] = cvmask # とても変なことになっている
return masked
0