ステレオグラムの作り方_基本編2(深度マップを作る)
”ステレオグラムの作り方_基本編1”の続きになります。
②3Dで見せたい画像(深度マップ)を作る
次は浮き出てくる方の画像を作りましょう。
Pythonでオリジナルのランダムドットステレオグラム(RDS)を作る。 - Qiita
Making Your Own Autostereograms using Python | Frolian's blog (flothesof.github.io)
def make_depthmap(shape=(400, 600)):
depthmap = np.zeros(shape, dtype=np.float64)
cv2.circle(depthmap, (int(shape[1]/2), int(shape[0]/2)), 100, (255 ,255, 255), -1)
return depthmap
depthmap = make_depthmap()
plt.imshow(depthmap, cmap='gray')
これは黒地に白の模様が入った画像なら何でもいいのかな?
コードを見ていきましょう。
2行目の”np.zeros”は以下の働きをする関数です。
変数”depthmap”が深度マップの情報になります。depthmapの画像サイズと
どんなデータが入るかを決め、ゼロで初期化するということをしているんですね。
全部ゼロってことは画像は黒で塗りつぶされているってことかな。
3行目の”cv2.circle”では円を作っていますね。
<cv2.circle(img, center, radius, color, thickness, lineType, shift)>
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
img :円を描く対象となる画像
center :描画する円の中心座標
radius :描画する円の半径
color :円の線の色
thickness :円の線の太さ
lineType :描画アルゴリズム
shift :謎
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
今の場合だと、
第1引数img :depthmap
第2引数center:(int(shape[1]/2), int(shape[0]/2))。
depthmapの画像サイズが横600×縦400なので、縦横をそれぞれ
2で割って中心座標を(300,200)にしてますね。
第4引数color:(255, 255, 255)で青・緑・赤のデータがMAXなので白
第5引数thikness:-1 。マイナス設定だと円の内部を塗りつぶす
ということで、全体が真っ黒なdepthmap画像の中心に100 ピクセルの白く塗りつぶされた円が出来上がりました。
次はいよいよ
③背景画像を深度マップの画像サイズに合うように並べていく
です!