LoginSignup
18
9

More than 3 years have passed since last update.

OpenCVでzero-paddingを1行でする方法

Posted at

しがない地方院生のsotaです。
初心者なので間違いが多々あると思いますが、その時はコメントで教えていただけると幸いです。

研究やバイトでたびたびパディングを実装するのですが、毎回pillowやらopencvやらでどうするか調べて、一時間近く実装に使っていたのですが、タイトルにもあるようにopencvで1行で実装できることが分かったので、備忘録として残します。

cv2.copyMakeBorder()

具体的にはcv2.copyMakeBorder()を使います。
使い方は

output = cv2.copyMakeBorder(src, top, bottom, left, right, borderType, value)

です。
- srcは入力画像
- top, bottom, left, rightはそれぞれ画像の上下左右に何ピクセル空白を加えるか
- borderType は追加する境界の種類を指定するためのフラグで、いわゆるpaddingをしたいなら、cv2.BORDER_CONSTANTを選択してください。
- 他にもcv2.BORDER_REFLECT, cv2.BORDER_DEFAULT, cv2.BORDER_REPLICATE, cv2.BORDER_WRAPなどがありますが、少しパディングとは異なってくるので、これらは公式ドキュメントを参考にしてください。
http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_core/py_basic_ops/py_basic_ops.html
- valueはpaddingした箇所の色を指定します。(0,0,0)なら黒、(255,255,255)なら白といった具合です。

実装例


import cv2

img = cv2.imread('./fig.png')

img_pad = cv2.copyMakeBorder(img, 50, 50, 50, 50, cv2.BORDER_CONSTANT, (0,0,0))

cv2.imwrite('./fig_pad.png', img_pad)

無事パディングできています。
今まで黒い画像を作ってスライスで場所を毎回考えながら貼り付けた手間を考えると、驚くほど簡単にできました。
私は今後、opencvではこの方法でパディングします。

18
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
9