def textDelete(event, x,y, flags, param): global ix, iy, drawing, img, origin, back, mask, maskBack if event == cv2.EVENT_LBUTTONDOWN: ix = x iy = y drawing = True elif event == cv2.EVENT_MOUSEMOVE: if drawing == True: img = origin.copy() cv2.rectangle(img,(ix,iy),(x,y),(255,0,0),1) elif event == cv2.EVENT_LBUTTONUP: drawing = False img = origin.copy() textFinder= ballTextMasker.BalloonCleaner() if ix < x: x1 = ix x2 = x else: x1 = x x2 = ix if iy < y: y1 = iy y2 = y else: y1 = y y2 = iy maskBack = mask.copy() maskTemp, img[y1:y2+1,x1:x2+1] = textFinder.cleanBalloon(img[y1:y2+1,x1:x2+1]) mask[y1:y2 + 1, x1:x2 + 1] = cv2.add(mask[y1:y2+1,x1:x2+1],maskTemp) back = origin.copy() origin = img.copy()
def main(string): if not os.path.isdir('./cleaned'): os.mkdir('./cleaned') if not os.path.isdir('./mask'): os.mkdir('./mask') textFinder = ballTextMasker.BalloonCleaner() for root, dirs, files in os.walk(string): for fname in files: fileName = os.path.join(root, fname) cleanName = 'cleaned\\' + fileName.split('\\')[-1] maskName = 'mask\\' + fileName.split('\\')[-1] img = cv2.imread(fileName) mask = np.zeros(img.shape, np.uint8) data = bubbleFinder.bubbleFinder(img) for [x, y, w, h] in data: mask[y:y + h, x:x + w], img[y:y + h, x:x + w] = textFinder.cleanBalloon( img[y:y + h, x:x + w]) cv2.rectangle(img, (x, y), (x + w, y + h), (30, 0, 255), 3) #shrink = cv2.resize(img, None, fx=0.7, fy=0.7, interpolation=cv2.INTER_AREA) #cv2.imshow('process', shrink) #cv2.waitKey(0) cv2.imwrite(cleanName, img) cv2.imwrite(maskName, mask)
def main(string): retrain_run_opencv.create_graph() if not os.path.isdir('./cleaned'): os.mkdir('./cleaned') if not os.path.isdir('./mask'): os.mkdir('./mask') textFinder = ballTextMasker.BalloonCleaner() for root, dirs, files in os.walk(string): for fname in files: fileName = os.path.join(root, fname) sp = fileName.split('/')[-1] sp = sp.replace('\\','_') cleanName = 'cleaned\\cleaned_'+sp #resName = 'cleaned\\res_' + fileName.split('\\')[-1] maskName = 'cleaned\\mask_' +sp img = cv2.imread(fileName) mask = np.zeros(img.shape,np.uint8) if img is None: continue if scanned.isScanned(img) is True: print(fileName,' is scanned') continue data = bubbleFinder.bubbleFinder(img) if len(data) is not 0: for [x, y, w, h] in data: if x < 5: x1 = 0 else: x1 = x-5 if y < 5: y1 = 0 else: y1 = y-5 if x+w > img.shape[1] - 5: w = img.shape[1] - x else: w += 5 if y+h > img.shape[0] - 5: h = img.shape[0] - y else: h += 5 maskTemp, img[y1:y + h, x1:x + w] = textFinder.cleanBalloon(img[y1:y+h, x1:x+w]) mask[y1:y + h, x1:x + w] = cv2.bitwise_or(mask[y1:y + h, x1:x + w],maskTemp) cv2.imwrite(cleanName,img) ## for [x, y, w, h] in data: ## cv2.rectangle(img, (x-5, y-5), (x + w+5, y + h+5), (255, 30, 0), 3) ## if len(badData) == 0: ## continue ## for [x, y, w, h] in badData: ## cv2.rectangle(img, (x-5, y-5), (x + w+5, y + h+5), (30, 0, 255), 3) ## ## print(len(data)) ## print(len(badData)) #cv2.imwrite(resName,img) cv2.imwrite(maskName, mask)
def textDelete(event, x, y, flags, param): global ix, iy, drawing, img, origin, back, mask, maskBack, maskTemp, mode, rad, color trace = [] if event == cv2.EVENT_LBUTTONDOWN: if mode == 'RECT': ix = x iy = y elif mode == 'DRAW': maskTemp = np.zeros(mask.shape, np.uint8) cv2.circle(img, (x, y), rad, color, -1) cv2.circle(maskTemp, (x, y), rad, (0, 0, 255), -1) drawing = True elif event == cv2.EVENT_MOUSEMOVE: if mode == 'RECT': if drawing == True: img = origin.copy() cv2.rectangle(img, (ix, iy), (x, y), (255, 0, 0), 4) elif mode == 'DRAW': if drawing == True: cv2.circle(img, (x, y), rad, color, -1) cv2.circle(maskTemp, (x, y), rad, (0, 0, 255), -1) elif event == cv2.EVENT_LBUTTONUP: drawing = False if mode == 'RECT': img = origin.copy() textFinder = ballTextMasker.BalloonCleaner() if ix < x: x1 = ix x2 = x else: x1 = x x2 = ix if iy < y: y1 = iy y2 = y else: y1 = y y2 = iy maskBack = mask.copy() maskTemp, img[y1:y2 + 1, x1:x2 + 1] = textFinder.cleanBalloon(img[y1:y2 + 1, x1:x2 + 1]) mask[y1:y2 + 1, x1:x2 + 1] = cv2.add(mask[y1:y2 + 1, x1:x2 + 1], maskTemp) back = origin.copy() origin = img.copy() elif mode == 'DRAW': if color[0] > 128: imgTemp = cv2.bitwise_not(origin) else: imgTemp = origin.copy() maskBack = mask.copy() back = origin.copy() origin = img.copy() maskTemp = cv2.bitwise_and(imgTemp, maskTemp) mask = cv2.add(mask, maskTemp) elif event == cv2.EVENT_RBUTTONDOWN: if mode == 'DRAW': color = (img[y, x]).tolist() print('mode DRAW rad = ' + str(rad) + " color is ", color)
def textDelete(event, x, y, flags, param): global ix, iy, drawing, img, origin, back, mask, maskBack, maskTemp, mode, rad, color, maskColor, maskForClear, noChanged trace = [] if event == cv2.EVENT_LBUTTONDOWN: if mode == 'RECT' or mode == 'RECTPAINT': ix = x iy = y elif mode == 'DRAW' or mode == 'MANUAL': maskTemp = np.zeros(mask.shape, np.uint8) cv2.circle(img, (x, y), rad, color, -1) cv2.circle(maskTemp, (x, y), rad, maskColor, -1) elif mode == 'ERASE': maskForClear = np.full(mask.shape, 255, np.uint8) #cv2.circle(img,(x,y),rad,(0,0,0),-1) cv2.circle(maskForClear, (x, y), rad, (0, 0, 0), -1) drawing = True elif event == cv2.EVENT_MOUSEMOVE: if mode == 'RECT' or mode == 'RECTPAINT': if drawing == True: img = origin.copy() cv2.rectangle(img, (ix, iy), (x, y), (255, 0, 0), 1) # fixed mask color elif mode == 'DRAW' or mode == 'MANUAL': if drawing == True: cv2.circle(img, (x, y), rad, color, -1) cv2.circle(maskTemp, (x, y), rad, maskColor, -1) else: img = origin.copy() cv2.circle(img, (x, y), rad, color, -1) elif mode == 'ERASE': if drawing == True: cv2.circle(maskForClear, (x, y), rad, (0, 0, 0), -1) elif event == cv2.EVENT_LBUTTONUP: drawing = False if mode == 'RECT': img = origin.copy() textFinder = ballTextMasker.BalloonCleaner() if ix < x: x1 = ix x2 = x else: x1 = x x2 = ix if iy < y: y1 = iy y2 = y else: y1 = y y2 = iy maskBack = mask.copy() maskT, img[y1:y2 + 1, x1:x2 + 1] = textFinder.cleanBalloon(img[y1:y2 + 1, x1:x2 + 1]) mask[y1:y2 + 1, x1:x2 + 1] = cv2.add(mask[y1:y2 + 1, x1:x2 + 1], maskT) back = origin.copy() origin = img.copy() if mode == 'RECTPAINT': img = origin.copy() if ix < x: x1 = ix x2 = x else: x1 = x x2 = ix if iy < y: y1 = iy y2 = y else: y1 = y y2 = iy maskBack = mask.copy() img[y1:y2 + 1, x1:x2 + 1] = np.full((y2 + 1 - y1, x2 + 1 - x1, 3), 255, np.uint8) back = origin.copy() origin = img.copy() elif mode == 'DRAW': if color[0] > 128: imgTemp = cv2.bitwise_not(origin) else: imgTemp = origin.copy() maskBack = mask.copy() back = origin.copy() origin = img.copy() maskTemp = cv2.bitwise_and(imgTemp, maskTemp) mask = cv2.add(mask, maskTemp) elif mode == 'MANUAL': maskBack = mask.copy() back = origin.copy() origin = img.copy() mask = cv2.add(mask, maskTemp) elif mode == 'ERASE': maskBack = mask.copy() maskBack = mask.copy() back = origin.copy() origin = img.copy() mask = cv2.bitwise_and(mask, maskForClear) gmask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY) fmask = cv2.threshold(gmask, 10, 255, cv2.THRESH_BINARY)[1] bmask = cv2.bitwise_not(fmask) fg = cv2.bitwise_and(img, img, mask=fmask) bg = cv2.bitwise_and(noChanged, noChanged, mask=bmask) img = cv2.add(fg, bg) maskForClear = np.full(mask.shape, 255, np.uint8) elif event == cv2.EVENT_RBUTTONDOWN: if mode == 'DRAW' or mode == 'MANUAL': color = (origin[y, x]).tolist() print('mode DRAW rad = ' + str(rad) + " color is ", color)