【OpenCV】画像の一部のみ処理するROIの設定について【Python版】


はじめに

かなり前に、画像の一部のみ処理するROIの設定について【OpenCV2.x,3.x】という記事を書いていましたが、
最近は、C++を使わず、Pythonばかりいじるようになってきたので、Python版のROI設定をメモ書きしようと思います。

 サンプルコード

サンプルコードは前回と同じ、画像のぼかし処理です。

##
# cording:utf-8
##

import numpy as np
import cv2

def main():
    # 画像入力
    img = cv2.imread("test.jpg")

    print(img.shape)

    # 処理領域を設定(left(x1), top(y1), right(x2), bottom(y2))
    roi = (937,218, 1280, 350)

    # 出力の初期化(入力画像を複製)
    dst_img = img.copy()

    # ROI領域を抜き出し、抜き出した画像をぼかす
    # [top:bottom, left:right] 順序
    s_roi = img[roi[1]: roi[3], roi[0]: roi[2]]
    s_roi = cv2.blur(s_roi, (30, 30)) # ぼかし処理

    # 出力画像の同じ箇所に埋め込み
    dst_img[roi[1]: roi[3], roi[0]: roi[2]] = s_roi

    # ぼかした領域をわかりやすくするために入力画像に矩形描画
    rect_img = img.copy()
    cv2.rectangle(rect_img, (roi[2],roi[3]), (roi[0],roi[1]), (0, 255, 0), 2)

    # 描画
    cv2.namedWindow("image", cv2.WINDOW_AUTOSIZE | cv2.WINDOW_FREERATIO)
    cv2.namedWindow("dst_image", cv2.WINDOW_AUTOSIZE | cv2.WINDOW_FREERATIO)
    cv2.imshow("image", rect_img)
    cv2.imshow("dst_image", dst_img)
    cv2.waitKey()

    cv2.destroyAllWindows()

if __name__ == '__main__':
    main()

 結果

今回もあかりちゃんに犠牲になってもらいました。
犠牲の犠牲にな・・・
緑の枠の部分をぼかしています。