実現したいこと
異なるサイズの画像を別の画像に貼り付ける際に指定の位置で指定の角度に傾けたい
発生している問題・分からないこと
位置を指定する
M = np.float32([[1, 0, 40],[0, 1, 40]])
のコードと
M = cv2.getRotationMatrix2D(center=(fg_w / 2, fg_h / 2), angle=15, scale=0.5)
のコードの両方を反映させたいのですが、後に書いたコードしか保存した画像には反映されていません。
この位置の指定と傾ける処理の両方を反映させる方法がわかりません。
該当のソースコード
import numpy as np import cv2 fg_img = cv2.imread("001.png") # アフィン変換を適用する画像 bg_img = cv2.imread("bg_img.png") # 背景画像 fg_h, fg_w = fg_img.shape[:2] M = np.float32([[1, 0, 40],[0, 1, 40]]) M = cv2.getRotationMatrix2D(center=(fg_w / 2, fg_h / 2), angle=15, scale=0.5) bg_h, bg_w = bg_img.shape[:2] dst = cv2.warpAffine( fg_img, M, dsize=(bg_w, bg_h), dst=bg_img, borderMode=cv2.BORDER_TRANSPARENT ) cv2.imwrite("aa.png", dst)
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
位置の指定と貼り付けた画像を傾け処理の両方を反映させている記事が見つかりませんでした。
補足
特になし
> 位置の指定
> 傾ける処理
どちらか一方であれば問題無く実現できているのでしょうか?
そうであれば,まず
> 傾ける処理
で傾いた画像を生成し,次にそれを
> 位置の指定
で貼りつける,という手順で処理を行えばよいのではないでしょうか.
(それだと何か問題があるのでしょうか?)
↑失礼,そういう話じゃなさそう.
並進変換と回転変換を1つのアフィン変換に合成したい,という話ですね.
getRotationMatrix2D で得た行列内の並進に対応する要素(一番右の列)に適切な値を加算してやればよいのではないでしょうか.
コメントありがとうございます。getRotationMatrix2Dの一番右の列に値を加算したら解決しました!
ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
> 同じ内容を回答欄に投稿いただけますでしょうか?
しました.
ただ,ご自身でやってみた結果得られた知見等がある場合には,そういう情報を含めた自己回答の形をとっても良いと思います.
![guest](/img/icon/icnUserSample.jpg)
回答1件
あなたの回答
tips
プレビュー