猫ひげシール回転
4103 ワード
座標を2つに分けます.
1つ目は、画像キャンバス上の座標(xi,yi)(x i,y i)(xi,yi)(xi,yi)であり、写真左topを原点とする座標である.
2つ目は、マップキャンバス上の座標(xs,ys)(xs,y s)(xs,ys)で、マップの左上隅を原点とする座標です.
マップキャンバスの原点は、画像キャンバスの原点(l,t)(l,t)(l,t)から離れている.
イメージキャンバスにマップキャンバス座標を表示するには
(xi,yi)=(xs+l,ys+t)(x i,y i)=(x s+l,y s+t)(xi,yi)=(xs+l,ys+t).
逆に、イメージキャンバスの座標をマップキャンバスに表示するには:
(xs,ys)=(xi are,yi t)(x s,y s)=(x i-l,y i-t)=(xs,ys)=(xi are,yi act).
2つの座標系が重なるため、それらを切り替えるときに混同してはいけません.私は土を少し掘った.
以下のコードにはxix ixiまたはysy sysと同じタグはありません.
必要に応じて、画像キャンバス座標を大座標、マップキャンバス座標を小座標と呼びます.
シールを再表示し、座標地獄の画像変換を行います.
マップの位置とマーカーの位置を指定します.
この赤い点がランドマークのどの位置に適しているかを比較します
マップの基点としての座標を検索
移動はマップキャンバス内で行われるので、小さな座標が必要です.
私たちが得ることができるランドマーク座標は大きな座標であり、変換する必要があります.
(xs,ys)=(xi,yi,t)(x s,y s)=(x i-l,y i-t)=(xs,ys)=(xi,yi,t)計算はcat list 2である.は、指定されたランドマーク として容易に指定できる.顔を変えてもあまり変わらない 顔の輪郭線はその名の通り輪郭であるため、顔の回転時に表示される点があまりにも異なり、使用できません
例えば、正面はこめかみ、側面は耳 の輪郭線を基準にして、正面写真でもひげが歪んでいる場合があります. 江南CamのJiEunさんによると眉毛の角度=ひげの角度を利用するように、ひげの形状に関連する形態を探すには、 しかし、眉に変換するとシールが位置決めしにくくなり、 だから選択鼻 長方形の大きな座標と小さな座標を保持します. ここでは最初は多くの問題が発生していましたが、「頬の輪郭と鼻の中点」という基準では、場合によっては座標の反転によってひげが 歪むことになります.
したがって、は、回転の影響が小さい鼻の周りで矩形ノイズ を行う.鼻を等辺三角形と見なし、中間に裁断された等辺台形形状. はこのような形で捉えられたが、なぜか上下回転が脆弱になり、どのように変えたのか分からない.
画像で確認します.赤:基点、緑:変換点ヘンカンてん
へんかんプロセス
投影変換されていないケースのコード
ノードで行う操作と大差ないので省略する.
変換された場合
同じコードに異なる写真のみをロード
残念なことに. y軸回転はある程度カバーされているが、x軸回転時には所望の感覚がなく、 は複数の人に同時に適用される可能性がありますが、簡単に試してみる勇気がありません. 変換の際、キャンバスの外からひげが抜ける現象は
cv2.warpPerspectiveで調整可能(w,h)
その後シールスペースに貼る過程で処理できないと感じたので諦めました もっと顔の曲面に貼ろうと思ったのですが、それは半分だけ変換した時にもっとよく表現されていたのですが、そうなると正面写真が完全に壊れてしまいました…両者を補う方法を見つけたいのですが、失敗しました. この程度のはずだ
参考になると役に立ちますか.
私の考えを諸説あるような気がします.
私の説明不足で理解できない点があれば.
ブログコメントで秘密基地コメントやチャットはやめましょう!
ここで確認できるかどうか保証できません.きょうどう
もしあなたがもっと良いバージョンにアップグレードしたら、私にも教えてください.ありがとうございます.
簡単に書こうと思っていたが、あいまいな文章になったようだ.
ここまで我慢してくれてありがとう.😂😂😂
1つ目は、画像キャンバス上の座標(xi,yi)(x i,y i)(xi,yi)(xi,yi)であり、写真左topを原点とする座標である.
2つ目は、マップキャンバス上の座標(xs,ys)(xs,y s)(xs,ys)で、マップの左上隅を原点とする座標です.
マップキャンバスの原点は、画像キャンバスの原点(l,t)(l,t)(l,t)から離れている.
イメージキャンバスにマップキャンバス座標を表示するには
(xi,yi)=(xs+l,ys+t)(x i,y i)=(x s+l,y s+t)(xi,yi)=(xs+l,ys+t).
逆に、イメージキャンバスの座標をマップキャンバスに表示するには:
(xs,ys)=(xi are,yi t)(x s,y s)=(x i-l,y i-t)=(xs,ys)=(xi are,yi act).
2つの座標系が重なるため、それらを切り替えるときに混同してはいけません.私は土を少し掘った.
以下のコードにはxix ixiまたはysy sysと同じタグはありません.
必要に応じて、画像キャンバス座標を大座標、マップキャンバス座標を小座標と呼びます.
シールを再表示し、座標地獄の画像変換を行います.
マップの位置とマーカーの位置を指定します.
この赤い点がランドマークのどの位置に適しているかを比較します
マップの基点としての座標を検索
cat_list1 = [(int(w*0.46), int(w*0.4)),
(int(w*0.54), int(w*0.4)),
(int(w*0.4), int(w*0.57)),
(int(w*0.6), int(w*0.57))]
移動する座標を検索移動はマップキャンバス内で行われるので、小さな座標が必要です.
私たちが得ることができるランドマーク座標は大きな座標であり、変換する必要があります.
(xs,ys)=(xi,yi,t)(x s,y s)=(x i-l,y i-t)=(xs,ys)=(xi,yi,t)計算はcat list 2である.
cat_list2 = [((landmark[31][0]+landmark[27][0])//2 - l, (landmark[31][1]+landmark[27][1])//2 - t),
((landmark[35][0]+landmark[27][0])//2 - l, (landmark[35][1]+landmark[27][1])//2 - t),
(landmark[31][0] - l, landmark[31][1] - t),
(landmark[35][0] - l, landmark[35][1] - t)]
私が座標を選ぶ基準は.例えば、正面はこめかみ、側面は耳
したがって、
for point in cat_list1:
cv2.circle(sticker_copy, point, 2, (255, 0, 0), -1)
for point in cat_list2:
cv2.circle(sticker_copy, point, 2, (0, 255, 0), -1)
へんかんプロセス
pts1 = np.float32(cat_list1) # 이동 전 작은좌표
pts2 = np.float32(cat_list2) # 이동 후 작은좌표
M = cv2.getPerspectiveTransform(pts1,pts2) # 변환시켜주는 매트릭스
dst = cv2.warpPerspective(img_sticker,M,(w,h), borderValue = [255, 255, 255, 255])
# 실제로 이미지를 M을 이용해 변환해주는 코드
# 회전시켰을 때 검은 배경을 없애기 위해 borderValue 설정
投影変換されていないケースのコード
ノードで行う操作と大差ないので省略する.
変換された場合
sticker_area2 = img_bgr[t:t+dst.shape[0], l:l+dst.shape[1]]
# 스티커가 들어갈 공간 = l과 t 에서 스티커 가로세로만큼 확보
img_bgr[t:t+dst.shape[0], l:l+dst.shape[1]] = \
np.where(dst==0, cv2.addWeighted(dst, 0.8, sticker_area2, 0.2, 0), sticker_area2).astype(np.uint8)
# 똑같은 사이즈로 만들고 검은색 수염인 경우만 드러나도록 설정
同じコードに異なる写真のみをロード
残念なことに.
cv2.warpPerspectiveで調整可能(w,h)
その後シールスペースに貼る過程で処理できないと感じたので諦めました
参考になると役に立ちますか.
私の考えを諸説あるような気がします.
私の説明不足で理解できない点があれば.
ブログコメントで秘密基地コメントやチャットはやめましょう!
ここで確認できるかどうか保証できません.きょうどう
もしあなたがもっと良いバージョンにアップグレードしたら、私にも教えてください.ありがとうございます.
簡単に書こうと思っていたが、あいまいな文章になったようだ.
ここまで我慢してくれてありがとう.😂😂😂
Reference
この問題について(猫ひげシール回転), 我々は、より多くの情報をここで見つけました https://velog.io/@yvelog/고양이-수염-스티커-회전テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol