C:\fakepath\original.jpg(/upfiles/1542707582239963.jpg)(/upfiles/15427075603671739.jpg)
Hi When I use the below code without bothering hirerachy , it is able to detect external contours correctly . Pl see the attached file “drawn-NO-hirerachy”. My original image has three external contours . cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
when I use hirerachy code , it is not detecting external contours correctly . It shows a few points that I red circled in “drawa-with hirerachy”
im,cnts,hierarchy = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
Following is the code I am using
import the necessary packages
import numpy as np import cv2 import imutils import pytesseract from PIL import Image, ImageEnhance from imutils.perspective import four_point_transform from array import *
load the example image
image = cv2.imread("h2.jpg")
pre-process the image by resizing it, converting it to
graycale, blurring it, and computing an edge map
image = imutils.resize(image, height=500) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray, (5, 5), 0) edged = cv2.Canny(blurred, 50, 200, 255)
cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
im,cnts,hierarchy = cv2.findContours(edged, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)
print 'No Of Contours = ', len(cnts)
print 'No Of elements in hirerachy = ', len(hierarchy[0]) print hierarchy
major = cv2.__version__.split('.')[0]
print major
for c in cnts: cv2.drawContours(image, [c], -1, (0,255,0), 2)
cv2.imshow('EDGED',edged) cv2.imshow('DRAWN CONTOURS',image) cv2.imshow('RETURNED IMAGE',im) cv2.waitKey(0)