お世話になります。
カラー画像の背景差分を取得したいのですが、情報が少なく難航しております。
以下にソースコードを記載いたします。
Python
1# -*- coding: UTF-8 -*- 2 3import cv2 4import math 5import numpy as np 6import os 7import sys 8 9if __name__ == '__main__': 10 11 for folder, subfolders, files in os.walk('REC201807111225280000/img'): 12 print('folder: {}'.format(folder)) 13 print('subfolders: {}'.format(subfolders)) 14 print('files: {}'.format(files)) 15 16 for i in range(26): 17 # 画像の読み込み 18 img_src1 = cv2.imread("./REC201807111225280000/20180711-122541-00013760.jpg", 1) 19 #ディレクトリ内の画像を順番に読み込み 20 img_src2 = cv2.imread(format(folder)+"/"+format(files[i])) 21 22 23 # 背景画像との差分を算出 24 img_diff = cv2.absdiff(img_src2, img_src1) 25 26 # 差分を二値化 27 img_diffm = cv2.threshold(img_diff, 20, 255, cv2.THRESH_BINARY)[1] 28 29 # 膨張処理、収縮処理を施してマスク画像を生成 30 operator = np.ones((3, 3), np.uint8) 31 img_dilate = cv2.dilate(img_diffm, operator, iterations=3) 32 img_mask = cv2.erode(img_dilate, operator, iterations=3) 33 34 # マスク画像を使って対象を切り出す 35 img_src2=cv2.cvtColor(img_src2,cv2.COLOR_RGB2GRAY) 36 img_dst = cv2.bitwise_and(img_src2, img_mask) 37 38 name='./REC201807111225280000(sabun02)/{0}(1).jpg'.format(files[i]) 39 #保存 40 cv2.imwrite(name, img_dst)
ソースはほぼこちらのサイト様のままです。
https://www.blog.umentu.work/python3-opencv3%E3%81%A7%E8%83%8C%E6%99%AF%E5%B7%AE%E5%88%86%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B/
期待する動作としては、変化があった部分はそのまま抜き出し、
変化がなかった部分は真っ黒(あるいは白)に塗りつぶしたいのですが、このコードだと変化がなかった部分が綺麗に塗りつぶされず、色がついてしまいます。
img_diffmがきちんと2値化できておらず、この時点で色がついてしまっているのが原因ではないかと思うのですが、解決策がわかりません。
何卒ご教授いただければ幸いです。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。