しがない地方院生の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ではこの方法でパディングします。