def getFeatures(self, image, inithann, scale_adjust=1.0): extracted_roi = [0,0,0,0] #[int,int,int,int] roi=list(self._roi) cx = roi[0] + roi[2]/2 #float cy = roi[1] + roi[3]/2 #float if(inithann): padded_w = roi[2] * self.padding padded_h = roi[3] * self.padding if(self.template_size > 1): if(padded_w >= padded_h): self._scale = padded_w / float(self.template_size) else: self._scale = padded_h / float(self.template_size) self._tmpl_sz[0] = int(padded_w / self._scale) self._tmpl_sz[1] = int(padded_h / self._scale) else: self._tmpl_sz[0] = int(padded_w) self._tmpl_sz[1] = int(padded_h) self._scale = 1. if(self._hogfeatures): self._tmpl_sz[0] = int(self._tmpl_sz[0]) // (2*self.cell_size) * 2*self.cell_size + 2*self.cell_size self._tmpl_sz[1] = int(self._tmpl_sz[1]) // (2*self.cell_size) * 2*self.cell_size + 2*self.cell_size else: self._tmpl_sz[0] = int(self._tmpl_sz[0]) // 2 * 2 self._tmpl_sz[1] = int(self._tmpl_sz[1]) // 2 * 2 extracted_roi[2] = int(scale_adjust * self._scale * self._tmpl_sz[0]) extracted_roi[3] = int(scale_adjust * self._scale * self._tmpl_sz[1]) extracted_roi[0] = int(cx - extracted_roi[2]//2) extracted_roi[1] = int(cy - extracted_roi[3]//2) z = subwindow(image, extracted_roi, cv2.BORDER_REPLICATE) if(z.shape[1]!=self._tmpl_sz[0] or z.shape[0]!=self._tmpl_sz[1]): tmplsz=map(int,self._tmpl_sz) tmplsz=list(tmplsz) z = cv2.resize(z, tuple(tmplsz)) if(self._hogfeatures): mapp = {'sizeX':0, 'sizeY':0, 'numFeatures':0, 'map':0} mapp = fhog.getFeatureMaps(z, self.cell_size, mapp) mapp = fhog.normalizeAndTruncate(mapp, 0.2) mapp = fhog.PCAFeatureMaps(mapp) self.size_patch = list(map(int, [mapp['sizeY'], mapp['sizeX'], mapp['numFeatures']])) FeaturesMap = mapp['map'].reshape((self.size_patch[0]*self.size_patch[1], self.size_patch[2])).T # (size_patch[2], size_patch[0]*size_patch[1]) else: if(z.ndim==3 and z.shape[2]==3): FeaturesMap = cv2.cvtColor(z, cv2.COLOR_BGR2GRAY) # z:(size_patch[0], size_patch[1], 3) FeaturesMap:(size_patch[0], size_patch[1]) #np.int8 #0~255 elif(z.ndim==2): FeaturesMap = z #(size_patch[0], size_patch[1]) #np.int8 #0~255 FeaturesMap = FeaturesMap.astype(np.float32) / 255.0 - 0.5 self.size_patch = [z.shape[0], z.shape[1], 1] if(inithann): self.createHanningMats() # createHanningMats need size_patch FeaturesMap = self.hann * FeaturesMap return FeaturesMap
def get_scale_sample(self, image): xsf = None for i in range(self.n_scales): # Size of subwindow waiting to be detect patch_width = self.base_width * self.scaleFactors[i] * self.currentScaleFactor patch_height = self.base_height * self.scaleFactors[i] * self.currentScaleFactor cx = self._roi[0] + self._roi[2] / 2. cy = self._roi[1] + self._roi[3] / 2. # Get the subwindow im_patch = extractImage(image, cx, cy, patch_width, patch_height) if self.scale_model_width > im_patch.shape[1]: im_patch_resized = cv2.resize(im_patch, (self.scale_model_width, self.scale_model_height), None, 0, 0, 1) else: im_patch_resized = cv2.resize(im_patch, (self.scale_model_width, self.scale_model_height), None, 0, 0, 3) mapp = {'sizeX': 0, 'sizeY': 0, 'numFeatures': 0, 'map': 0} mapp = fhog.getFeatureMaps(im_patch_resized, self.cell_size, mapp) mapp = fhog.normalizeAndTruncate(mapp, 0.2) mapp = fhog.PCAFeatureMaps(mapp) if i == 0: totalSize = mapp['numFeatures'] * mapp['sizeX'] * mapp['sizeY'] xsf = np.zeros((totalSize, self.n_scales)) # Multiply the FHOG results by hanning window and copy to the output FeaturesMap = mapp['map'].reshape((totalSize, 1)) FeaturesMap = self.s_hann[0][i] * FeaturesMap xsf[:, i] = FeaturesMap[:, 0] return fftd(xsf, False, True)
def getFeatures(self, image, inithann, scale_adjust=1.): #print('getFeatures') extracted_roi = [0, 0, 0, 0] cx = self._roi[0] + self._roi[2] / 2 cy = self._roi[1] + self._roi[3] / 2 if inithann: padded_w = self._roi[2] * self.padding padded_h = self._roi[3] * self.padding if self.template_size > 1: # 把最大的边缩小到96,_scale是缩小比例 # _tmpl_sz是滤波模板的大小也是裁剪下的PATCH大小 if padded_w >= padded_h: self._scale = padded_w / float(self.template_size) else: self._scale = padded_h / float(self.template_size) self._tmpl_sz[0] = int(padded_w / self._scale) self._tmpl_sz[1] = int(padded_h / self._scale) else: self._tmpl_sz[0] = int(padded_w) self._tmpl_sz[1] = int(padded_h) self._scale = 1. if self._hogfeatures: self._tmpl_sz[0] = int(self._tmpl_sz[0]) // (2 * self.cell_size) * 2 * self.cell_size + 2 * self.cell_size self._tmpl_sz[1] = int(self._tmpl_sz[1]) // (2 * self.cell_size) * 2 * self.cell_size + 2 * self.cell_size else: self._tmpl_sz[0] = int(self._tmpl_sz[0]) // 2 * 2 self._tmpl_sz[1] = int(self._tmpl_sz[1]) // 2 * 2 # 选取从原图中扣下的图片位置大小 extracted_roi[2] = int(scale_adjust * self._scale * self._tmpl_sz[0] * self.currentScaleFactor) extracted_roi[3] = int(scale_adjust * self._scale * self._tmpl_sz[1] * self.currentScaleFactor) extracted_roi[0] = int(cx - extracted_roi[2] / 2) extracted_roi[1] = int(cy - extracted_roi[3] / 2) #print('extracted_roi: ', extracted_roi) # z是当前帧被裁剪下的搜索区域, 基于extracted_roi获取(预测区域) z = subwindow(image, extracted_roi, cv2.BORDER_REPLICATE) # print('subwindow, select in z: ', z.shape) if self.cnn_multilayer == 0: # use frame_diff in multi_KCF if type(self.pre_frame) == type(z): # get inter-frame difference self.pre_frame = subwindow(self.pre_frame, extracted_roi, cv2.BORDER_REPLICATE) self.frame_diff = np.sum(abs(z - self.pre_frame)) / (z.shape[0]*z.shape[1]) self.pre_frame = image if z.shape[1] != self._tmpl_sz[0] or z.shape[0] != self._tmpl_sz[1]: # 缩小到tmpl_sz z = cv2.resize(z, (self._tmpl_sz[0],self._tmpl_sz[1])) # print('resize z to tmpl_sz: ', z.shape) if self._hogfeatures: mapp = {'sizeX': 0, 'sizeY': 0, 'numFeatures': 0, 'map': 0} mapp = fhog.getFeatureMaps(z, self.cell_size, mapp) mapp = fhog.normalizeAndTruncate(mapp, 0.2) mapp = fhog.PCAFeatureMaps(mapp) # size_patch为列表,保存裁剪下来的特征图的【长,宽,通道】 self.size_patch = list(map(int, [mapp['sizeY'], mapp['sizeX'], mapp['numFeatures']])) FeaturesMap = mapp['map'].reshape((self.size_patch[0] * self.size_patch[1], self.size_patch[2])).T # (size_patch[2], size_patch[0]*size_patch[1]) elif self._cnnfeatures: FeaturesMap = self.get_feat(z) if self.multi_gray: # test multi_channel features FeaturesMap = FeaturesMap / 255.0 - 0.5 self.size_patch = [FeaturesMap.shape[0], FeaturesMap.shape[1], FeaturesMap.shape[2]] else: if type(FeaturesMap) == type([]): # fill self.size_patch self.size_patch = [FeaturesMap[0].shape[0], FeaturesMap[0].shape[1], FeaturesMap[0].shape[2]] self.cnn_multidepth = [FeaturesMap[0].shape[2],FeaturesMap[1].shape[2],FeaturesMap[2].shape[2]] #print('get multi cnn featMap: ', FeaturesMap[0].shape, self.cnn_multidepth) else: #print('get single cnn featMap: ', FeaturesMap.shape) # write self.size_patch by FeaturesMap.shape self.size_patch = [FeaturesMap.shape[0], FeaturesMap.shape[1], FeaturesMap.shape[2]] else: # 将RGB图变为单通道灰度图 if z.ndim == 3 and z.shape[2] == 3: FeaturesMap = cv2.cvtColor(z, cv2.COLOR_BGR2GRAY) if self.SAVE_feat: path_gray = save_path + 'gray' + str(self.count) + '.jpg' cv2.imwrite(path_gray, FeaturesMap) elif z.ndim == 2: FeaturesMap = z #print(FeaturesMap.shape) # 从此FeatureMap从-0.5到0.5 FeaturesMap = FeaturesMap.astype(np.float32) / 255.0 - 0.5 # size_patch为列表,保存裁剪下来的特征图的[长,宽,1] self.size_patch = [z.shape[0], z.shape[1], 1] self.count += 1 if inithann: self.createHanningMats() #FeaturesMap = FeaturesMap.astype(np.float32) / 255.0 - 0.5 if type(FeaturesMap) == type([]): for i in range(len(FeaturesMap)): FeaturesMap[i] = self.hann[i] * FeaturesMap[i] else: # print('add hann: ', self.hann.shape, '\n') FeaturesMap = self.hann * FeaturesMap # 加汉宁窗(cosine)减少频谱泄露 return FeaturesMap
def getFeatures(self, image, inithann, scale_adjust=1.): extracted_roi = [0, 0, 0, 0] cx = self._roi[0] + self._roi[2] / 2 cy = self._roi[1] + self._roi[3] / 2 if inithann: padded_w = self._roi[2] * self.padding padded_h = self._roi[3] * self.padding if self.template_size > 1: # 把最大的边缩小到96,_scale是缩小比例 # _tmpl_sz是滤波模板的大小也是裁剪下的PATCH大小 if padded_w >= padded_h: self._scale = padded_w / float(self.template_size) else: self._scale = padded_h / float(self.template_size) self._tmpl_sz[0] = int(padded_w / self._scale) self._tmpl_sz[1] = int(padded_h / self._scale) else: self._tmpl_sz[0] = int(padded_w) self._tmpl_sz[1] = int(padded_h) self._scale = 1. if self._hogfeatures: self._tmpl_sz[0] = int(self._tmpl_sz[0]) // (2 * self.cell_size) * 2 * self.cell_size + 2 * self.cell_size self._tmpl_sz[1] = int(self._tmpl_sz[1]) // (2 * self.cell_size) * 2 * self.cell_size + 2 * self.cell_size else: self._tmpl_sz[0] = int(self._tmpl_sz[0]) // 2 * 2 self._tmpl_sz[1] = int(self._tmpl_sz[1]) // 2 * 2 # 选取从原图中扣下的图片位置大小 extracted_roi[2] = int(scale_adjust * self._scale * self._tmpl_sz[0] * self.currentScaleFactor) extracted_roi[3] = int(scale_adjust * self._scale * self._tmpl_sz[1] * self.currentScaleFactor) extracted_roi[0] = int(cx - extracted_roi[2] / 2) extracted_roi[1] = int(cy - extracted_roi[3] / 2) # z是当前帧被裁剪下的搜索区域 z = subwindow(image, extracted_roi, cv2.BORDER_REPLICATE) if z.shape[1] != self._tmpl_sz[0] or z.shape[0] != self._tmpl_sz[1]: # 缩小到96 z = cv2.resize(z, tuple(self._tmpl_sz)) if self._hogfeatures: mapp = {'sizeX': 0, 'sizeY': 0, 'numFeatures': 0, 'map': 0} mapp = fhog.getFeatureMaps(z, self.cell_size, mapp) mapp = fhog.normalizeAndTruncate(mapp, 0.2) mapp = fhog.PCAFeatureMaps(mapp) # size_patch为列表,保存裁剪下来的特征图的【长,宽,通道】 self.size_patch = list(map(int, [mapp['sizeY'], mapp['sizeX'], mapp['numFeatures']])) FeaturesMap = mapp['map'].reshape((self.size_patch[0] * self.size_patch[1], self.size_patch[2])).T # (size_patch[2], size_patch[0]*size_patch[1]) else: # 将RGB图变为单通道灰度图 if z.ndim == 3 and z.shape[2] == 3: FeaturesMap = cv2.cvtColor(z, cv2.COLOR_BGR2GRAY) elif z.ndim == 2: FeaturesMap = z # 从此FeatureMap从-0.5到0.5 FeaturesMap = FeaturesMap.astype(np.float32) / 255.0 - 0.5 # size_patch为列表,保存裁剪下来的特征图的【长,宽,1】 self.size_patch = [z.shape[0], z.shape[1], 1] if inithann: self.createHanningMats() FeaturesMap = self.hann * FeaturesMap # 加汉宁(余弦)窗减少频谱泄露 return FeaturesMap
def getFeatures(self, image, inithann, scale_adjustx=1.0, scale_adjusty=1.0): extracted_roi = [0, 0, 0, 0] # [int,int,int,int] cx = self._roi[0] + self._roi[2] / 2 # float cy = self._roi[1] + self._roi[3] / 2 # float if inithann: padded_w = self._roi[2] * self.padding padded_h = self._roi[3] * self.padding if (self.template_size > 1): if (padded_w >= padded_h): self._scalex = padded_w / float(self.template_size) else: self._scaley = padded_h / float(self.template_size) self._tmpl_sz[0] = int(padded_w / self._scalex) self._tmpl_sz[1] = int(padded_h / self._scaley) else: self._tmpl_sz[0] = int(padded_w) self._tmpl_sz[1] = int(padded_h) self._scalex = 1. self._scaley = 1. if (self._hogfeatures): self._tmpl_sz[0] = int(self._tmpl_sz[0]) / ( 2 * self.cell_size) * 2 * self.cell_size + 2 * self.cell_size self._tmpl_sz[1] = int(self._tmpl_sz[1]) / ( 2 * self.cell_size) * 2 * self.cell_size + 2 * self.cell_size else: self._tmpl_sz[0] = int(self._tmpl_sz[0]) / 2 * 2 self._tmpl_sz[1] = int(self._tmpl_sz[1]) / 2 * 2 extracted_roi[2] = int(scale_adjustx * self._scalex * self._tmpl_sz[0]) extracted_roi[3] = int(scale_adjusty * self._scaley * self._tmpl_sz[1]) extracted_roi[0] = int(cx - extracted_roi[2] / 2) extracted_roi[1] = int(cy - extracted_roi[3] / 2) z = subwindow(image, extracted_roi, cv2.BORDER_REPLICATE) if (z.shape[1] != self._tmpl_sz[0] or z.shape[0] != self._tmpl_sz[1]): z = cv2.resize(z, tuple(np.array(self._tmpl_sz).astype(np.uint8))) if (self._hogfeatures): mapp = {'sizeX': 0, 'sizeY': 0, 'numFeatures': 0, 'map': 0} mapp = fhog.getFeatureMaps(z, self.cell_size, mapp) mapp = fhog.normalizeAndTruncate(mapp, 0.2) mapp = fhog.PCAFeatureMaps(mapp) self.size_patch = list( map(int, [mapp['sizeY'], mapp['sizeX'], mapp['numFeatures']])) FeaturesMap = mapp['map'].reshape( (self.size_patch[0] * self.size_patch[1], self.size_patch[2] )).T # (size_patch[2], size_patch[0]*size_patch[1]) # t1 = time.time() # colormap = im2color(z, 1, self.size_patch[1], self.size_patch[0]) # FeaturesMap = np.array(FeaturesMap.tolist() + colormap.tolist()) # t2 = time.time() # self.size_patch[2] += 11 else: if (z.ndim == 3 and z.shape[2] == 3): # z:(size_patch[0], size_patch[1], 3) FeaturesMap:(size_patch[0], size_patch[1]) #np.int8 #0~255 FeaturesMap = cv2.cvtColor(z, cv2.COLOR_BGR2HSV)[:, :, 0] elif (z.ndim == 2): FeaturesMap = z # (size_patch[0], size_patch[1]) #np.int8 #0~255 FeaturesMap = FeaturesMap.astype(np.float32) / 255.0 - 0.5 self.size_patch = [z.shape[0], z.shape[1], 1] if (inithann): self.createHanningMats() # createHanningMats need size_patch FeaturesMap = self.hann * FeaturesMap return FeaturesMap
def getFeatures(self, image, inithann, scale_adjust=1.0): extracted_roi = [0, 0, 0, 0] # [int,int,int,int] print("11111111111111 = ", self._roi) # _roi = [0,0,0,0] # for item in self._roi: # print("item = ", item) # print("11111111111111111 ",self._roi) cx = self._roi[0] + self._roi[2] / 2 # float 0123分别是左上角的坐标Xy,以及矩形的长和宽 cy = self._roi[1] + self._roi[3] / 2 # float if (inithann): padded_w = self._roi[2] * self.padding padded_h = self._roi[3] * self.padding print("self.padding = ", self.padding) print("self._roi[ = ", self._roi) if (self.template_size > 1): # template_size?? #把最大的边缩小到96,_scale是缩小比例 # _tmpl_sz是滤波模板的大小也是裁剪下的PATCH大小 print("padded_w = ", padded_w) print("padded_h = ", padded_h) if (padded_w >= padded_h): self._scale = padded_w / float(self.template_size) else: self._scale = padded_h / float(self.template_size) print("self._scale = ", self._scale) self._tmpl_sz[0] = int(padded_w / self._scale) # ?? self._tmpl_sz[1] = int(padded_h / self._scale) else: self._tmpl_sz[0] = int(padded_w) self._tmpl_sz[1] = int(padded_h) self._scale = 1. if (self._hogfeatures): self._tmpl_sz[0] = int( (self._tmpl_sz[0]) / (2 * self.cell_size)) * 2 * self.cell_size + 2 * self.cell_size self._tmpl_sz[1] = int( (self._tmpl_sz[1]) / (2 * self.cell_size)) * 2 * self.cell_size + 2 * self.cell_size else: self._tmpl_sz[0] = int(self._tmpl_sz[0]) / 2 * 2 # ?? self._tmpl_sz[1] = int(self._tmpl_sz[1]) / 2 * 2 extracted_roi[2] = int(scale_adjust * self._scale * self._tmpl_sz[0]) # 选取从原图中扣下的图片位置大小 extracted_roi[3] = int(scale_adjust * self._scale * self._tmpl_sz[1]) extracted_roi[0] = int(cx - extracted_roi[2] / 2) extracted_roi[1] = int(cy - extracted_roi[3] / 2) z = subwindow(image, extracted_roi, cv2.BORDER_REPLICATE) # z是当前帧被裁剪下的搜索区域 if (z.shape[1] != self._tmpl_sz[0] or z.shape[0] != self._tmpl_sz[1]): # 缩小到96 self._tmpl_sz[0] = int(self._tmpl_sz[0]) self._tmpl_sz[1] = int(self._tmpl_sz[1]) print("self._tmpl_sz = ", self._tmpl_sz) z = cv2.resize(z, tuple(self._tmpl_sz)) if (self._hogfeatures): mapp = {'sizeX': 0, 'sizeY': 0, 'numFeatures': 0, 'map': 0} mapp = fhog.getFeatureMaps(z, self.cell_size, mapp) mapp = fhog.normalizeAndTruncate(mapp, 0.2) mapp = fhog.PCAFeatureMaps(mapp) print("sizeY = ", mapp['sizeY']) print("sizeX = ", mapp['sizeX']) print("numFeatures = ", mapp['numFeatures']) self.size_patch = map( int, [mapp['sizeY'], mapp['sizeX'], mapp['numFeatures']]) # size_patch为列表,保存裁剪下来的特征图的【长,宽,通道】 self.size_patch = list(self.size_patch) FeaturesMap = mapp['map'].reshape( (self.size_patch[0] * self.size_patch[1], self.size_patch[2] )).T # (size_patch[2], size_patch[0]*size_patch[1]) else: if (z.ndim == 3 and z.shape[2] == 3): # 三维且第三维长度为3?? 三通道,也就是RGB图像 FeaturesMap = cv2.cvtColor(z, cv2.COLOR_BGR2GRAY) # z:(size_patch[0], size_patch[1], 3) FeaturesMap:(size_patch[0], size_patch[1]) # #np.int8 #0~255 elif (z.ndim == 2): FeaturesMap = z # (size_patch[0], size_patch[1]) #np.int8 #0~255 FeaturesMap = FeaturesMap.astype(np.float32) / 255.0 - 0.5 # 从此FeatureMap从-0.5到0.5 self.size_patch = [z.shape[0], z.shape[1], 1] # size_patch为列表,保存裁剪下来的特征图的【长,宽,1】 if (inithann): self.createHanningMats() # createHanningMats need size_patch FeaturesMap = self.hann * FeaturesMap # 加汉宁(余弦)窗减少频谱泄露 return FeaturesMap
def getFeatures(self, image, inithann, scale_adjust=1.0): """ 提取窗口特征 //步骤: //1.根据给定的框框找到合适的框框 //2.提取HOG特征 //3.对特征进行归一化和截断 //4.对特征进行PCA降维 //5.创建一个常数阵,对所有特征根据cell的位置进行加权 :param image: 输入图像 :param inithann: 是否使用汉宁窗 :param scale_adjust: 调整因子 :return: 返回提取到的特征 """ extracted_roi = [0, 0, 0, 0] # 用于提取特征的窗口 cx = self._roi[0] + self._roi[2] / 2 cy = self._roi[1] + self._roi[3] / 2 if inithann: # 初始化汉宁窗,只在第一帧的时候执行一次 padded_w = self._roi[2] * self.padding padded_h = self._roi[3] * self.padding if self.template_size > 1: # 按照长宽比修改_tmpl长宽大小,保证长边为96 if padded_w >= padded_h: self._scale = padded_w / float(self.template_size) else: self._scale = padded_h / float(self.template_size) self._tmpl_sz[0] = int(padded_w / self._scale) self._tmpl_sz[1] = int(padded_h / self._scale) else: self._tmpl_sz[0] = int(padded_w) self._tmpl_sz[1] = int(padded_h) self._scale = 1. if self._hogfeatures: # 设置_tmpl_sz的长宽:向上取原来长宽的最小2*cell_size倍 self._tmpl_sz[0] = int(self._tmpl_sz[0]) // ( 2 * self.cell_size) * 2 * self.cell_size + 2 * self.cell_size self._tmpl_sz[1] = int(self._tmpl_sz[1]) // ( 2 * self.cell_size) * 2 * self.cell_size + 2 * self.cell_size else: self._tmpl_sz[0] = int(self._tmpl_sz[0]) // 2 * 2 self._tmpl_sz[1] = int(self._tmpl_sz[1]) // 2 * 2 extracted_roi[2] = int(scale_adjust * self._scale * self._tmpl_sz[0]) # 检测区域大小 extracted_roi[3] = int(scale_adjust * self._scale * self._tmpl_sz[1]) extracted_roi[0] = int(cx - extracted_roi[2] / 2) # 检测区域的左上角坐标 extracted_roi[1] = int(cy - extracted_roi[3] / 2) z = tools.subwindow(image, extracted_roi, cv2.BORDER_REPLICATE) # 提取目标区域像素,超边界则做填充 if z.shape[1] != self._tmpl_sz[0] or z.shape[0] != self._tmpl_sz[1]: z = cv2.resize(z, tuple(self._tmpl_sz)) # 按照比例缩小边界大小 if self._hogfeatures: # 提取HOG特征点 mapp = {'sizeX': 0, 'sizeY': 0, 'numFeatures': 0, 'map': 0} mapp = fhog.getFeatureMaps(z, self.cell_size, mapp) mapp = fhog.normalizeAndTruncate(mapp, 0.2) # 对HOG特征归一化和截断 mapp = fhog.PCAFeatureMaps(mapp) # PCA降维 self.size_patch = list( map(int, [mapp['sizeY'], mapp['sizeX'], mapp['numFeatures']])) FeaturesMap = mapp['map'].reshape( (self.size_patch[0] * self.size_patch[1], self.size_patch[2])).T else: if z.ndim == 3 and z.shape[2] == 3: FeaturesMap = cv2.cvtColor( z, cv2.COLOR_BGR2GRAY) # 如果图像时三通道则转换为灰度图 elif z.ndim == 2: FeaturesMap = z FeaturesMap = FeaturesMap.astype(np.float32) / 255.0 - 0.5 self.size_patch = [z.shape[0], z.shape[1], 1] if inithann: self.createHanningMats() FeaturesMap = self.hann * FeaturesMap return FeaturesMap