More detail, the class evaluate whether two image is same or diffrent by 2 threshold.
first threshold is the britness different of pixel.
second threshold is percent of change. eg. count(changed pixel) / area(width*height)
This class can be applied detection of motion in continues image.
And you can study how to run opencv in the python.
I am also bigginer of python use.
I studied a part of relation numpy and opencv.
class_ImgSubtraction.py
--
__author__ = 'mare'
import numpy as np
import cv2
class ImgSubtraction:
    #image load
    def __init__(self, r_img, th1, th2):
        self.RImg = r_img
        self.Th1, self.Th2 = th1, th2
        self.cols, self.rows = r_img.shape[:2]
        self.area = self.cols * self.rows
    #image subtraction
    def eval_subtraction(self, c_img):
        #return false if c_img size is different with RImg
        if self.RImg.shape[:2] != c_img.shape[:2]:
            return 0
        ic_img = c_img
        #subtraction
        is_img = np.subtract(self.RImg, np.int_(ic_img))
        #abs
        ia_img = np.abs(is_img)
        #count pixels difference over than th1
        dcount = np.sum(ia_img > self.Th1)
        #image change percent
        dpersent = (dcount/np.float32(self.area) ) * 100
        if dpersent >= self.Th2:
            return 1
        else:
            return 0
--main.py
--
__author__ = 'mare'
import cv2
from class_ImgSubtraction import ImgSubtraction
RImg = cv2.imread('test.png', 0)
CImg = cv2.imread('test2.png', 0)
e1 = cv2.getTickCount()
cImgSub = ImgSubtraction(RImg, 10, 1)
if cImgSub.eval_subtraction(CImg):
    print ('image different')
e2 = cv2.getTickCount()
time = (e2 - e1)/cv2.getTickFrequency()
print(time, 1/time)
cv2.waitKey(0)
--you can also download the source code on the github
-> https://gist.github.com/mare90/2ea9b9ca7c80c8c259e1
 
 
 
 
No comments:
Post a Comment