Python cv2.getStructuringElement() Examples
The following are 30
code examples of cv2.getStructuringElement().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
cv2
, or try the search function
.
Example #1
Source File: plate_locate.py From EasyPR-python with Apache License 2.0 | 8 votes |
def sobelOperT(self, img, blursize, morphW, morphH): ''' No different with sobelOper ? ''' blur = cv2.GaussianBlur(img, (blursize, blursize), 0, 0, cv2.BORDER_DEFAULT) if len(blur.shape) == 3: gray = cv2.cvtColor(blur, cv2.COLOR_RGB2GRAY) else: gray = blur x = cv2.Sobel(gray, cv2.CV_16S, 1, 0, 3) absX = cv2.convertScaleAbs(x) grad = cv2.addWeighted(absX, 1, 0, 0, 0) _, threshold = cv2.threshold(grad, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY) element = cv2.getStructuringElement(cv2.MORPH_RECT, (morphW, morphH)) threshold = cv2.morphologyEx(threshold, cv2.MORPH_CLOSE, element) return threshold
Example #2
Source File: detect_picture_color_circle.py From Python-Code with MIT License | 7 votes |
def findPiccircle(frame, color): hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) color_dict = color_list.getColorList() mask = cv2.inRange(hsv, color_dict[color][0], color_dict[color][1]) dilated = cv2.dilate(mask, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)), iterations=2) ## 需要修改minRadius以及maxRadius,用来限制识别圆的大小,排除其他的干扰 circles = cv2.HoughCircles(dilated, cv2.HOUGH_GRADIENT, 1, 1000, param1=15, param2=10, minRadius=15, maxRadius=50) center = None if circles is not None: x, y, radius = circles[0][0] center = (x, y) cv2.circle(frame, center, radius, (0, 255, 0), 2) cv2.circle(frame, center, 2, (0,255,0), -1, 8, 0 ); print('圆心:{}, {}'.format(x, y)) cv2.imshow('result', frame) if center != None: return center
Example #3
Source File: Preprocess.py From ALPR-Indonesia with MIT License | 7 votes |
def maximizeContrast(imgGrayscale): height, width = imgGrayscale.shape imgTopHat = np.zeros((height, width, 1), np.uint8) imgBlackHat = np.zeros((height, width, 1), np.uint8) structuringElement = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) imgTopHat = cv2.morphologyEx(imgGrayscale, cv2.MORPH_TOPHAT, structuringElement) imgBlackHat = cv2.morphologyEx(imgGrayscale, cv2.MORPH_BLACKHAT, structuringElement) imgGrayscalePlusTopHat = cv2.add(imgGrayscale, imgTopHat) imgGrayscalePlusTopHatMinusBlackHat = cv2.subtract(imgGrayscalePlusTopHat, imgBlackHat) return imgGrayscalePlusTopHatMinusBlackHat # end function
Example #4
Source File: line_detect_2.py From crop_row_detection with GNU General Public License v3.0 | 7 votes |
def skeletonize(image_in): '''Inputs and grayscale image and outputs a binary skeleton image''' size = np.size(image_in) skel = np.zeros(image_in.shape, np.uint8) ret, image_edit = cv2.threshold(image_in, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) element = cv2.getStructuringElement(cv2.MORPH_CROSS, (3,3)) done = False while not done: eroded = cv2.erode(image_edit, element) temp = cv2.dilate(eroded, element) temp = cv2.subtract(image_edit, temp) skel = cv2.bitwise_or(skel, temp) image_edit = eroded.copy() zeros = size - cv2.countNonZero(image_edit) if zeros == size: done = True return skel
Example #5
Source File: vnet3d_train_predict.py From LiTS---Liver-Tumor-Segmentation-Challenge with MIT License | 7 votes |
def predict0(): Vnet3d = Vnet3dModule(256, 256, 64, inference=True, model_path="model\\Vnet3dModule.pd") for filenumber in range(30): batch_xs = np.zeros(shape=(64, 256, 256)) for index in range(64): imgs = cv2.imread( "D:\Data\PROMISE2012\Vnet3d_data\\test\image\\" + str(filenumber) + "\\" + str(index) + ".bmp", 0) batch_xs[index, :, :] = imgs[128:384, 128:384] predictvalue = Vnet3d.prediction(batch_xs) for index in range(64): result = np.zeros(shape=(512, 512), dtype=np.uint8) result[128:384, 128:384] = predictvalue[index] kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) result = cv2.morphologyEx(result, cv2.MORPH_CLOSE, kernel) cv2.imwrite( "D:\Data\PROMISE2012\Vnet3d_data\\test\image\\" + str(filenumber) + "\\" + str(index) + "mask.bmp", result)
Example #6
Source File: functions.py From malayalam-character-recognition with MIT License | 7 votes |
def skeletize(img): size = np.size(img) skel = np.zeros(img.shape, np.uint8) element = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3)) done = False while not done: eroded = cv2.erode(img, element) temp = cv2.dilate(eroded, element) temp = cv2.subtract(img, temp) skel = cv2.bitwise_or(skel, temp) img = eroded.copy() zeroes = size - cv2.countNonZero(img) if zeroes == size: done = True return skel
Example #7
Source File: page.py From doc2text with MIT License | 7 votes |
def find_components(im, max_components=16): """Dilate the image until there are just a few connected components. Returns contours for these components.""" kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10)) dilation = dilate(im, kernel, 6) count = 21 n = 0 sigma = 0.000 while count > max_components: n += 1 sigma += 0.005 result = cv2.findContours(dilation, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) if len(result) == 3: _, contours, hierarchy = result elif len(result) == 2: contours, hierarchy = result possible = find_likely_rectangles(contours, sigma) count = len(possible) return (dilation, possible, n)
Example #8
Source File: mask_blend.py From faceswap with GNU General Public License v3.0 | 6 votes |
def _get_erosion_kernel(self, mask): """ Get the erosion kernel. Parameters ---------- mask: :class:`numpy.ndarray` The mask to be eroded or dilated Returns ------- :class:`numpy.ndarray` The erosion kernel to be used for erosion/dilation """ erosion_ratio = self.config["erosion"] / 100 mask_radius = np.sqrt(np.sum(mask)) / 2 kernel_size = max(1, int(abs(erosion_ratio * mask_radius))) erosion_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (kernel_size, kernel_size)) logger.trace("erosion_kernel shape: %s", erosion_kernel.shape) return erosion_kernel
Example #9
Source File: helpers.py From songoku with MIT License | 6 votes |
def blend_non_transparent(face_img, overlay_img): # Let's find a mask covering all the non-black (foreground) pixels # NB: We need to do this on grayscale version of the image gray_overlay = cv2.cvtColor(overlay_img, cv2.COLOR_BGR2GRAY) overlay_mask = cv2.threshold(gray_overlay, 1, 255, cv2.THRESH_BINARY)[1] # Let's shrink and blur it a little to make the transitions smoother... overlay_mask = cv2.erode(overlay_mask, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))) overlay_mask = cv2.blur(overlay_mask, (3, 3)) # And the inverse mask, that covers all the black (background) pixels background_mask = 255 - overlay_mask # Turn the masks into three channel, so we can use them as weights overlay_mask = cv2.cvtColor(overlay_mask, cv2.COLOR_GRAY2BGR) background_mask = cv2.cvtColor(background_mask, cv2.COLOR_GRAY2BGR) # Create a masked out face image, and masked out overlay # We convert the images to floating point in range 0.0 - 1.0 face_part = (face_img * (1 / 255.0)) * (background_mask * (1 / 255.0)) overlay_part = (overlay_img * (1 / 255.0)) * (overlay_mask * (1 / 255.0)) # And finally just add them together, and rescale it back to an 8bit integer image return np.uint8(cv2.addWeighted(face_part, 255.0, overlay_part, 255.0, 0.0))
Example #10
Source File: cvutils.py From 1ZLAB_PyEspCar with GNU General Public License v3.0 | 6 votes |
def backprojection(target, roihist): '''图像预处理''' hsvt = cv2.cvtColor(target,cv2.COLOR_BGR2HSV) dst = cv2.calcBackProject([hsvt],[0,1],roihist,[0,180,0,256],1) # Now convolute with circular disc disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(7,7)) cv2.filter2D(dst,-1,disc,dst) # threshold and binary AND ret,binary = cv2.threshold(dst,80,255,0) # 创建 核 kernel = np.ones((5,5), np.uint8) iter_time = 1 # 闭运算 binary = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel,iterations=iter_time) thresh = cv2.merge((binary,binary,binary)) target_filter = cv2.bitwise_and(target,thresh) return binary, target_filter
Example #11
Source File: lanenet_postprocess.py From lanenet-enet-hnet with Apache License 2.0 | 6 votes |
def _morphological_process(image, kernel_size=5): """ :param image: :param kernel_size: :return: """ if image.dtype is not np.uint8: image = np.array(image, np.uint8) if len(image.shape) == 3: image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) kernel = cv2.getStructuringElement(shape=cv2.MORPH_ELLIPSE, ksize=(kernel_size, kernel_size)) # close operation fille hole closing = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel, iterations=1) return closing
Example #12
Source File: plate_locate.py From EasyPR-python with Apache License 2.0 | 6 votes |
def colorSearch(self, src, color, out_rect): """ :param src: :param color: :param out_rect: minAreaRect :return: binary """ color_morph_width = 10 color_morph_height = 2 match_gray = colorMatch(src, color, False) _, src_threshold = cv2.threshold(match_gray, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY) element = cv2.getStructuringElement(cv2.MORPH_RECT, (color_morph_width, color_morph_height)) src_threshold = cv2.morphologyEx(src_threshold, cv2.MORPH_CLOSE, element) out = src_threshold.copy() _, contours, _ = cv2.findContours(src_threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) for cnt in contours: mr = cv2.minAreaRect(cnt) if self.verifySizes(mr): out_rect.append(mr) return out
Example #13
Source File: lucidDream.py From pyLucid with MIT License | 6 votes |
def spline_transform_multi(img, mask): bimask=mask>0 M,N=np.where(bimask) w=np.ptp(N)+1 h=np.ptp(M)+1 kernel=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3)) bound=cv2.dilate(bimask.astype('uint8'),kernel)-bimask y,x=np.where(bound>0) if x.size>4: newxy=thin_plate_transform(x,y,w,h,mask.shape[:2],num_points=5) new_img=cv2.remap(img,newxy,None,cv2.INTER_LINEAR) new_msk=cv2.remap(mask,newxy,None,cv2.INTER_NEAREST) elif x.size>0: new_img=img new_msk=mask return new_img,new_msk
Example #14
Source File: detect_background.py From zmMagik with GNU General Public License v2.0 | 6 votes |
def __init__(self, min_accuracy, min_blend_area, kernel_fill=20, dist_threshold=15000, history=400): self.min_accuracy = max (min_accuracy, 0.7) self.min_blend_area = min_blend_area self.kernel_clean = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(4,4)) self.kernel_fill = np.ones((kernel_fill,kernel_fill),np.uint8) self.dist_threshold = dist_threshold self.history = history # read https://docs.opencv.org/3.3.0/d2/d55/group__bgsegm.html#gae561c9701970d0e6b35ec12bae149814 try: self.fgbg = cv2.bgsegm.createBackgroundSubtractorMOG(history=self.history, nmixtures=5, backgroundRatio=0.7, noiseSigma=0) except AttributeError as error: print ('It looks like your OpenCV version does not include bgsegm. Switching to createBackgroundSubtractorMOG2') self.fgbg = cv2.createBackgroundSubtractorMOG2(detectShadows=False, history=self.history) #self.fgbg = cv2.bgsegm.createBackgroundSubtractorGMG(decisionThreshold=0.98, initializationFrames=10) #self.fgbg = cv2.createBackgroundSubtractorMOG2(detectShadows=False, history=self.history) #self.fgbg=cv2.bgsegm.createBackgroundSubtractorGSOC(noiseRemovalThresholdFacBG=0.01, noiseRemovalThresholdFacFG=0.0001) #self.fgbg=cv2.bgsegm.createBackgroundSubtractorCNT(minPixelStability = 5, useHistory = True, maxPixelStability = 5 *60,isParallel = True) #self.fgbg=cv2.createBackgroundSubtractorKNN(detectShadows=False, history=self.history, dist2Threshold = self.dist_threshold) #fgbg=cv2.bgsegm.createBackgroundSubtractorLSBP() utils.success_print('Background subtraction initialized')
Example #15
Source File: vnet3d_train_predict.py From VNet3D with MIT License | 6 votes |
def predict0(): Vnet3d = Vnet3dModule(256, 256, 64, inference=True, model_path="model\\Vnet3dModule.pd") for filenumber in range(30): batch_xs = np.zeros(shape=(64, 256, 256)) for index in range(64): imgs = cv2.imread( "D:\Data\PROMISE2012\Vnet3d_data\\test\image\\" + str(filenumber) + "\\" + str(index) + ".bmp", 0) batch_xs[index, :, :] = imgs[128:384, 128:384] predictvalue = Vnet3d.prediction(batch_xs) for index in range(64): result = np.zeros(shape=(512, 512), dtype=np.uint8) result[128:384, 128:384] = predictvalue[index] kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) result = cv2.morphologyEx(result, cv2.MORPH_CLOSE, kernel) cv2.imwrite( "D:\Data\PROMISE2012\Vnet3d_data\\test\image\\" + str(filenumber) + "\\" + str(index) + "mask.bmp", result)
Example #16
Source File: instance_edge_generator.py From openseg.pytorch with MIT License | 6 votes |
def generate_edge(label, edge_width=10, area_thrs=200): label_list = [7, 8, 11, 12, 13, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 31, 32, 33] edge = np.zeros_like(label, dtype=np.uint8) for i in np.unique(label): # have no instance if i < 1000 or (i // 1000) not in label_list: continue # filter out small objects mask = (label == i).astype(np.uint8) if mask.sum() < area_thrs: continue rmin, rmax, cmin, cmax = _get_bbox(mask) mask_edge = _generate_edge(mask[rmin:rmax+1, cmin:cmax+1]) edge[rmin:rmax+1, cmin:cmax+1][mask_edge > 0] = 255 # dilation on edge kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (edge_width, edge_width)) edge = cv2.dilate(edge, kernel) return edge
Example #17
Source File: lucidDream.py From pyLucid with MIT License | 6 votes |
def SeamlessClone_trimap(srcIm,dstIm,imMask,offX,offY): dstIm=dstIm.copy() bimsk=imMask>0 new_msk=np.zeros(dstIm.shape[:2],dtype='uint8') new_msk[offY:offY+imMask.shape[0],offX:offX+imMask.shape[1]]=imMask dstIm[new_msk>0]=srcIm[imMask>0] kernel=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3)) bimsk=bimsk.astype('uint8') bdmsk=cv2.dilate(bimsk,kernel)-cv2.erode(bimsk,kernel) mask255=bdmsk>0 mask255=(mask255*255).astype('uint8') offCenter=(int(offX+imMask.shape[1]/2),int(offY+imMask.shape[0]/2)) if np.any(bdmsk>0): outputIm=cv2.seamlessClone(srcIm,dstIm,mask255,offCenter,cv2.MIXED_CLONE) else: outputIm=dstIm #when one object have very few pixels, bdmsk will be totally zero, which will cause segmentation fault. return outputIm,new_msk
Example #18
Source File: helpers.py From hazymaze with Apache License 2.0 | 6 votes |
def blend_non_transparent(sprite, background_img): gray_overlay = cv2.cvtColor(background_img, cv2.COLOR_BGR2GRAY) overlay_mask = cv2.threshold(gray_overlay, 1, 255, cv2.THRESH_BINARY)[1] overlay_mask = cv2.erode(overlay_mask, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))) overlay_mask = cv2.blur(overlay_mask, (3, 3)) background_mask = 255 - overlay_mask overlay_mask = cv2.cvtColor(overlay_mask, cv2.COLOR_GRAY2BGR) background_mask = cv2.cvtColor(background_mask, cv2.COLOR_GRAY2BGR) sprite_part = (sprite * (1 / 255.0)) * (background_mask * (1 / 255.0)) overlay_part = (background_img * (1 / 255.0)) * (overlay_mask * (1 / 255.0)) return np.uint8(cv2.addWeighted(sprite_part, 255.0, overlay_part, 255.0, 0.0))
Example #19
Source File: morphology.py From OpenCV-Python-Tutorial with MIT License | 6 votes |
def update(dummy=None): sz = cv2.getTrackbarPos('op/size', 'morphology') iters = cv2.getTrackbarPos('iters', 'morphology') opers = cur_mode.split('/') if len(opers) > 1: sz = sz - 10 op = opers[sz > 0] sz = abs(sz) else: op = opers[0] sz = sz*2+1 str_name = 'MORPH_' + cur_str_mode.upper() oper_name = 'MORPH_' + op.upper() st = cv2.getStructuringElement(getattr(cv2, str_name), (sz, sz)) res = cv2.morphologyEx(img, getattr(cv2, oper_name), st, iterations=iters) draw_str(res, (10, 20), 'mode: ' + cur_mode) draw_str(res, (10, 40), 'operation: ' + oper_name) draw_str(res, (10, 60), 'structure: ' + str_name) draw_str(res, (10, 80), 'ksize: %d iters: %d' % (sz, iters)) cv2.imshow('morphology', res)
Example #20
Source File: functions.py From bot with MIT License | 6 votes |
def get_target_centers(img): # Hide buff line # img[0:70, 0:500] = (0, 0, 0) # Hide your name in first camera position (default) img[210:230, 350:440] = (0, 0, 0) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # cv2.imwrite('1_gray_img.png', gray) # Find only white text ret, threshold1 = cv2.threshold(gray, 252, 255, cv2.THRESH_BINARY) # cv2.imwrite('2_threshold1_img.png', threshold1) # Morphological transformation kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (50, 5)) closed = cv2.morphologyEx(threshold1, cv2.MORPH_CLOSE, kernel) # cv2.imwrite('3_morphologyEx_img.png', closed) closed = cv2.erode(closed, kernel, iterations=1) # cv2.imwrite('4_erode_img.png', closed) closed = cv2.dilate(closed, kernel, iterations=1) # cv2.imwrite('5_dilate_img.png', closed) (_, centers, hierarchy) = cv2.findContours(closed, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) return centers
Example #21
Source File: MeterReader.py From Pointer-meter-identification-and-reading with MIT License | 5 votes |
def open_operation(self,img): # 定义结构元素 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构 # kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # 椭圆结构 # kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 十字形结构 opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) # 开运算 cv2.imshow('Open operation', opening) return opening # 霍夫圆变换:检测表盘
Example #22
Source File: capdet.py From katarina with MIT License | 5 votes |
def detectTwoColors( img, capColors ): imgResult = np.zeros( img.shape, np.uint8 ) imgB, imgG, imgR = cv2.split(img) for col in capColors: maskB = np.logical_and( imgB < col[0]+rad, imgB > col[0]-rad ) maskG = np.logical_and( imgG < col[1]+rad, imgG > col[1]-rad ) maskR = np.logical_and( imgR < col[2]+rad, imgR > col[2]-rad ) mask = np.logical_and(maskR, maskG) mask = np.logical_and(mask, maskB) if col[1] > max(col[0],col[2]): imgResult[mask] = (0,255,0) # green else: imgResult[mask] = (0,128,255) # orange gray = cv2.cvtColor( imgResult, cv2.COLOR_BGR2GRAY ) ret, binary = cv2.threshold( gray, 1, 255, cv2.THRESH_BINARY ) kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(7,7)) binary = cv2.dilate( binary, kernel ) cmpRG = imgR > imgG contours, hierarchy = cv2.findContours( binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE ) result = [] for cnt in contours: area = cv2.contourArea(cnt, oriented=True) if area < 0: cv2.drawContours(imgResult, [cnt], -1, (255,0,0), 2) maskTmp = np.zeros( (img.shape[0],img.shape[1]), np.uint8 ) cv2.drawContours(maskTmp, [cnt], -1, 255, -1) mask = maskTmp > 0 orange = np.count_nonzero(np.logical_and( mask, cmpRG )) # print abs(area), orange, orange/float(abs(area)) frac = orange/float(abs(area)) if abs(area) > 20 and (0.4 < frac < 0.7): M = cv2.moments(cnt) cx = int(M['m10']/M['m00']) cy = int(M['m01']/M['m00']) result.append( ((cx,cy), int(abs(area)), int(orange)) ) return imgResult, result
Example #23
Source File: page.py From doc2text with MIT License | 5 votes |
def reduce_noise_edges(im): structuring_element = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 1)) opening = cv2.morphologyEx(im, cv2.MORPH_OPEN, structuring_element) maxed_rows = rank_filter(opening, -4, size=(1, 20)) maxed_cols = rank_filter(opening, -4, size=(20, 1)) debordered = np.minimum(np.minimum(opening, maxed_rows), maxed_cols) return debordered
Example #24
Source File: imutils.py From craves.ai with GNU General Public License v3.0 | 5 votes |
def create_mask(self, img, color): img = cv2.cvtColor(img, cv2.COLOR_BGR2Lab) if color == 'green': threshold = [(20, 0, 128), (235, 128, 255)] elif color == 'white': threshold = [(100, 110, 110), (200, 140, 140)] else: raise Exception('Color undefined') mask = cv2.inRange(img, threshold[0], threshold[1]) # kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7)) # mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) # mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) mask = mask > 0 # img = cv2.cvtColor(img, cv2.COLOR_YCR_CB2BGR) # thres_img = np.zeros_like(img, np.uint8) # thres_img[mask] = img[mask] binary_img = np.zeros((img.shape[0],img.shape[1]), np.uint8) binary_img[mask] = 255 # cv2.imshow('img', binary_img) # cv2.waitKey(0) # exit(0) return mask
Example #25
Source File: geometries.py From deeposlandia with MIT License | 5 votes |
def extract_geometry_vertices(mask, structure_size=(10, 10), approx_eps=0.01): """Extract polygon vertices from a boolean mask with the help of OpenCV utilities, as a numpy array Parameters ---------- mask : numpy.array Image mask where to find polygons structure_size : tuple Size of the cv2 structuring artefact, as a tuple of horizontal and vertical pixels approx_eps : double Approximation coefficient, aiming at building more simplified polygons (this coefficient lies between 0 and 1, the larger the value is, the more important the approximation is) Returns ------- numpy.array List of polygons contained in the mask, identified by their vertices """ structure = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, structure_size) denoised = cv2.morphologyEx(mask, cv2.MORPH_OPEN, structure) grown = cv2.morphologyEx(denoised, cv2.MORPH_CLOSE, structure) _, contours, hierarchy = cv2.findContours( grown, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE ) polygons = [ cv2.approxPolyDP( c, epsilon=approx_eps * cv2.arcLength(c, closed=True), closed=True ) for c in contours ] return polygons, hierarchy
Example #26
Source File: ssocr.py From SSOCR with GNU General Public License v3.0 | 5 votes |
def preprocess(img, threshold, show=False, kernel_size=(5, 5)): # 直方图局部均衡化 clahe = cv2.createCLAHE(clipLimit=2, tileGridSize=(6, 6)) img = clahe.apply(img) # 自适应阈值二值化 dst = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 127, threshold) # 闭运算开运算 kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, kernel_size) dst = cv2.morphologyEx(dst, cv2.MORPH_CLOSE, kernel) dst = cv2.morphologyEx(dst, cv2.MORPH_OPEN, kernel) if show: cv2.imshow('equlizeHist', img) cv2.imshow('threshold', dst) return dst
Example #27
Source File: main.py From speed-detector with MIT License | 5 votes |
def filter_mask (mask): # I want some pretty drastic closing kernel_close = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (20, 20)) kernel_open = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (8, 8)) kernel_dilate = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # Remove noise opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel_open) # Close holes within contours closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel_close) # Merge adjacent blobs dilation = cv2.dilate(closing, kernel_dilate, iterations = 2) return dilation
Example #28
Source File: image_transformation.py From Sign-Language-Recognition with MIT License | 5 votes |
def make_background_black(frame): """ Makes everything apart from the main object of interest to be black in color. """ logger.debug("Making background black...") # Convert from RGB to HSV frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # Prepare the first mask. # Tuned parameters to match the skin color of the input images... lower_boundary = np.array([0, 40, 30], dtype="uint8") upper_boundary = np.array([43, 255, 254], dtype="uint8") skin_mask = cv2.inRange(frame, lower_boundary, upper_boundary) # Apply a series of erosions and dilations to the mask using an # elliptical kernel kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) skin_mask = cv2.erode(skin_mask, kernel, iterations=2) skin_mask = cv2.dilate(skin_mask, kernel, iterations=2) # Prepare the second mask lower_boundary = np.array([170, 80, 30], dtype="uint8") upper_boundary = np.array([180, 255, 250], dtype="uint8") skin_mask2 = cv2.inRange(frame, lower_boundary, upper_boundary) # Combine the effect of both the masks to create the final frame. skin_mask = cv2.addWeighted(skin_mask, 0.5, skin_mask2, 0.5, 0.0) # Blur the mask to help remove noise. # skin_mask = cv2.medianBlur(skin_mask, 5) frame_skin = cv2.bitwise_and(frame, frame, mask=skin_mask) frame = cv2.addWeighted(frame, 1.5, frame_skin, -0.5, 0) frame_skin = cv2.bitwise_and(frame, frame, mask=skin_mask) logger.debug("Done!") return frame_skin
Example #29
Source File: data_gen.py From Mobile-Image-Matting with MIT License | 5 votes |
def gen_trimap(alpha): k_size = random.choice(range(1, 5)) iterations = np.random.randint(1, 20) kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (k_size, k_size)) dilated = cv.dilate(alpha, kernel, iterations) eroded = cv.erode(alpha, kernel, iterations) trimap = np.zeros(alpha.shape) trimap.fill(128) trimap[eroded >= 255] = 255 trimap[dilated <= 0] = 0 return trimap # Randomly crop (image, trimap) pairs centered on pixels in the unknown regions.
Example #30
Source File: data_gen.py From Deep-Image-Matting-PyTorch with MIT License | 5 votes |
def gen_trimap(alpha): k_size = random.choice(range(1, 5)) iterations = np.random.randint(1, 20) kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (k_size, k_size)) dilated = cv.dilate(alpha, kernel, iterations) eroded = cv.erode(alpha, kernel, iterations) trimap = np.zeros(alpha.shape) trimap.fill(128) trimap[eroded >= 255] = 255 trimap[dilated <= 0] = 0 return trimap # Randomly crop (image, trimap) pairs centered on pixels in the unknown regions.