def processImage(self, curframe): cv.Smooth(curframe, curframe) #Remove false positives if not self.absdiff_frame: #For the first time put values in difference, temp and moving_average self.absdiff_frame = cv.CloneImage(curframe) self.previous_frame = cv.CloneImage(curframe) cv.Convert( curframe, self.average_frame ) #Should convert because after runningavg take 32F pictures else: cv.RunningAvg(curframe, self.average_frame, 0.05) #Compute the average cv.Convert(self.average_frame, self.previous_frame) #Convert back to 8U frame cv.AbsDiff(curframe, self.previous_frame, self.absdiff_frame) # moving_average - curframe cv.CvtColor( self.absdiff_frame, self.gray_frame, cv.CV_RGB2GRAY) #Convert to gray otherwise can't do threshold cv.Threshold(self.gray_frame, self.gray_frame, 50, 255, cv.CV_THRESH_BINARY) cv.Dilate(self.gray_frame, self.gray_frame, None, 15) #to get object blobs cv.Erode(self.gray_frame, self.gray_frame, None, 10)
def __produce_gradient_image(self, i, scale): size = cv.GetSize(i) grey_image = cv.CreateImage(size, 8, 1) size = [s/scale for s in size] grey_image_small = cv.CreateImage(size, 8, 1) cv.CvtColor(i, grey_image, cv.CV_RGB2GRAY) df_dx = cv.CreateImage(cv.GetSize(i), cv.IPL_DEPTH_16S, 1) cv.Sobel( grey_image, df_dx, 1, 1) cv.Convert(df_dx, grey_image) cv.Resize(grey_image, grey_image_small)#, interpolation=cv.CV_INTER_NN) cv.Resize(grey_image_small, grey_image)#, interpolation=cv.CV_INTER_NN) return grey_image
def FFT(image,flag = 0): w = image.width h = image.height iTmp = cv.CreateImage((w,h),cv.IPL_DEPTH_32F,1) cv.Convert(image,iTmp) iMat = cv.CreateMat(h,w,cv.CV_32FC2) mFFT = cv.CreateMat(h,w,cv.CV_32FC2) for i in range(h): for j in range(w): if flag == 0: num = -1 if (i+j)%2 == 1 else 1 else: num = 1 iMat[i,j] = (iTmp[i,j]*num,0) cv.DFT(iMat,mFFT,cv.CV_DXT_FORWARD) return mFFT
def applyEffect(self, image, width, height): ipl_img = cv2.cv.CreateImageHeader((image.shape[1], image.shape[0]), cv.IPL_DEPTH_8U, 3) cv2.cv.SetData(ipl_img, image.tostring(), image.dtype.itemsize * 3 * image.shape[1]) gray = cv.CreateImage((width, height), 8, 1) # tuple as the first arg dst_img = cv.CreateImage(cv.GetSize(ipl_img), cv.IPL_DEPTH_8U, 3) # _16S => cv2.cv.iplimage if self.effect == 'dilate': cv.Dilate(ipl_img, dst_img, None, 5) elif self.effect == 'laplace': cv.Laplace(ipl_img, dst_img, 3) elif self.effect == 'smooth': cv.Smooth(ipl_img, dst_img, cv.CV_GAUSSIAN) elif self.effect == 'erode': cv.Erode(ipl_img, dst_img, None, 1) cv.Convert(dst_img, ipl_img) return self.ipl2tk_image(dst_img)