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