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)
Example #3
0
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)
Example #4
0
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)