在OpenCV findcontours()中找到外部轮廓后,仅保存它们

时间:2019-05-19 07:42:24

标签: python opencv opencv-contour

我正在尝试提取僧伽罗语的手写字符。我使用查找轮廓来提取字符,除了一个小故障外,它都能正常工作。

它返回字符内的非字符。例如图像!(https://imgur.com/TJl93oT)返回!(https://imgur.com/d1A6u86)!(https://imgur.com/WjObTMr)!(https://imgur.com/XlWUNz3

我要保存的字符没有最后一个字符,而最后一个字符只是一个字符的一部分。我尝试像下面的代码中那样使用RETR_EXTERNAL标志,但是没有提取任何字符。

        imagepath = 'E:/MScProject/main/for_extract/resizeimg.jpg'
        extract_write_path = 'E:/MScProject/main/extraction'
        extract_read_path = 'E:/MScProject/test/extract/*.*'

        #Extract characters from image
        img = cv2.imread(imagepath)

        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        #cv2.imshow('gray', gray)

        ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
        #cv2.imshow('thresh', thresh)

        im2, ctrs, hier = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, 
        cv2.CHAIN_APPROX_SIMPLE)
        sorted_ctrs = sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[0])

        for i, ctr in enumerate(sorted_ctrs):
            x, y, w, h = cv2.boundingRect(ctr)

            roi = img[y:y + h, x:x + w]

            area = w*h

            if 1000 < area < 100000:
                #rect = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 
          0), 2)
                #cv2.imshow('rect', rect)
                cv2.imwrite(os.path.join(extract_write_path , 
         'at'+str(i)+'.jpeg'), roi)
                #cv2.imwrite('at'+str(i)+'.jpeg', roi)        

我只想获得两个字符,而不是该图像中显示的内部字符。非常感谢您的帮助。

0 个答案:

没有答案