J'ai quelques images de pages sur un tableau. Je voudrais recadrer les pages dans l'image. En général, la page est le plus grand rectangle de l'image, mais dans certains cas, les quatre côtés du rectangle ne sont pas visibles.
Je fais ce qui suit mais je n'obtiens pas les résultats souhaités :
import cv2
import numpy as np
im = cv2.imread('images/img5.jpg')
gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,127,255,0)
_,contours,_ = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
areas = [cv2.contourArea(c) for c in contours]
max_index = np.argmax(areas)
cnt=contours[max_index]
x,y,w,h = cv2.boundingRect(cnt)
cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imshow("Show",im)
cv2.imwrite("images/img5_rect.jpg", im)
cv2.waitKey(0)
Vous trouverez ci-dessous quelques exemples :
1er exemple : Je peux trouver le rectangle dans cette image, mais j'aimerais que la partie restante du bois soit également recadrée.
2ème exemple : Ne pas trouver les dimensions correctes du rectangle dans cette image.
3ème exemple : Impossible de trouver les dimensions correctes dans cette image non plus.