Skip to content

Instantly share code, notes, and snippets.

@TareObjects
Last active April 11, 2018 05:04
Show Gist options
  • Save TareObjects/da42dde0e546039575185c98c0f89ba1 to your computer and use it in GitHub Desktop.
Save TareObjects/da42dde0e546039575185c98c0f89ba1 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
import io
import picamera
import sys
import time
import datetime
import numpy as np
import cv2
# フレーム差分の計算
def frame_sub(img1, img2, img3, th):
# フレームの絶対差分
diff1 = cv2.absdiff(img1, img2)
diff2 = cv2.absdiff(img2, img3)
# 2つの差分画像の論理積
diff = cv2.bitwise_and(diff1, diff2)
# 二値化処理
diff[diff < th] = 0
diff[diff >= th] = 255
# メディアンフィルタ処理(ゴマ塩ノイズ除去)
mask = cv2.medianBlur(diff, 3)
return mask
#
# 画像取得
#
def get_gray_image():
# USB Camera
# ret, frame = cap.read()
# picamera
stream = io.BytesIO()
camera.capture(stream, format='jpeg')
data = np.fromstring(stream.getvalue(), dtype=np.uint8)
frame = cv2.imdecode(data, 1)
return cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
#
# 初期化、パラメータ読み込みなど
#
seconds = 1
showImage = False
fileImage = False
args = sys.argv
for i in args:
if i == "image":
showImage = True
if i == "file":
fileImage = True
if i.isdigit():
seconds = int(i)
print(showImage, seconds)
#
# カメラの準備
#
# USB Camera
# cap = cv2.VideoCapture(0)
# picamera
CAMERA_WIDTH = 320
CAMERA_HEIGHT = 240
camera = picamera.PiCamera()
camera.resolution = (CAMERA_WIDTH, CAMERA_HEIGHT)
# カメラ動作テスト : camera.capture('my_picture.jpg')
#
# フレーム先読み
#
frame1 = get_gray_image()
frame2 = get_gray_image()
frame3 = get_gray_image()
while(1):
mask = frame_sub(frame1, frame2, frame3, th=3)
# Aが押されたら終了、するはずなのですが
k = cv2.waitKey(30) & 0xff
if k == 65:
break
now = datetime.datetime.now()
wCount = np.count_nonzero(mask)
aCount = mask.size
filename = now.strftime("%Y-%m-%dT%H:%M:%S")
print filename, wCount, aCount, float(wCount) / float(aCount)
if showImage:
cv2.imshow('mask', mask)
cv2.imshow('frame2', frame2)
if fileImage:
cv2.imwrite('sabun/'+filename+'org.jpg', frame2)
cv2.imwrite('sabun/'+filename+'dif.jpg', mask)
frame1 = frame2
frame2 = frame3
frame3 = get_gray_image()
time.sleep(seconds)
cap.release()
cv2.destroyAllWindows()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment