#python #opencv-python
#питон #opencv-python
Вопрос:
Я создал функцию getContours() для поиска и рисования контуров на данном изображении, но я получаю уменьшенный контур в левом верхнем углу изображения. Тело функции приведено ниже.
def getContours(img,cannyThresh=[110,150],showCanny=Ложь,минАрет=1000,fil=0,ничья=Ложь):
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) imgBlur=cv2.GaussianBlur(imgGray,(5,5),1) imgCanny=cv2.Canny(imgBlur,cannyThresh[0],cannyThresh[1]) imgDil=cv2.dilate(imgCanny,np.ones((5,5)),iterations=4) imgThre=cv2.erode(imgDil,np.ones((5,5)),iterations=3) imgThre=cv2.resize(imgThre,(0,0),None,0.45,0.45) if showCanny: cv2.imshow('Canny Image',imgThre) contours,hierarchy=cv2.findContours(imgThre,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) finalContours=[] for contour in contours: area=cv2.contourArea(contour) if areagt;minArea: perimeter=cv2.arcLength(contour,True) approx=cv2.approxPolyDP(contour,0.02*perimeter,True) bbox=cv2.boundingRect(approx) if filgt;0: if len(approx)==fil: finalContours.append([len(approx),area,approx,bbox,contour]) else: finalContours.append([len(approx),area,approx,bbox,contour]) finalContours=sorted(finalContours,key=lambda x:x[1],reverse=True) if draw: for contour in finalContours: cv2.drawContours(img,contour[4],-1,(0,0,255),3) return img,finalContours
Параметры функции: img — Исходное изображение cannyThresh — Пороговые значения, используемые в функции Canny showCanny — Логическое значение, позволяющее решить, показывать или нет минарет изображения canny — Минимальная площадь, на основе которой я фильтрую контуры. В этой функции я передал 50000 как минарет. fil — Это количество очков. Я передал 4 за прямоугольник как fil. draw — логическое значение, позволяющее решить, рисовать контур или нет. Я передал True в вызове функции.
Я прикрепил выходное изображение. Вывод должен представлять собой контур по границам листа формата А4. Любая помощь будет признательна.
Спасибо за Вывод изображения