ChatGPT a une solution en python avec opencv, c'est super rapide. Par contre il me met un fond noir autour de la page détecté. Impossible de lui faire recadrer l'image sur la détection ou même remplacer le noir par du blanc.
importsysimportcv2importnumpyasnpimportosdefdetect_document(image_path):# Charger l'imageimage=cv2.imread(image_path)# Convertir l'image en niveaux de grisgray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)# Appliquer un flou gaussien pour réduire le bruitblurred=cv2.GaussianBlur(gray,(5,5),0)# Détecter les contours avec l'algorithme de Cannyedges=cv2.Canny(blurred,50,150)# Trouver les contours dans l'imagecontours,_=cv2.findContours(edges.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)# Trier les contours par aire décroissantecontours=sorted(contours,key=cv2.contourArea,reverse=True)# Parcourir les contours pour trouver celui qui correspond probablement à la feuilleforcontourincontours:# Approximer le contour à un polygoneperi=cv2.arcLength(contour,True)approx=cv2.approxPolyDP(contour,0.02*peri,True)# Si le polygone a quatre côtés, c'est probablement la feuilleiflen(approx)==4:page_contour=approxbreak# Dessiner le contour de la feuille sur une nouvelle imagecontour_image=np.zeros_like(image)cv2.drawContours(contour_image,[page_contour],-1,(255,255,255),thickness=cv2.FILLED)# Appliquer le masque à l'image d'origine pour extraire la région d'intérêtmasked_image=cv2.bitwise_and(image,contour_image)# Trouver les coordonnées de la boîte englobante pour la région d'intérêtx,y,w,h=cv2.boundingRect(page_contour)# Recadrer l'image en fonction de la région d'intérêtcropped_image=masked_image[y:y+h,x:x+w]# Obtenir le chemin complet de l'image recadrée avec le préfixe "crop_"output_dir,filename=os.path.split(image_path)filename,file_extension=os.path.splitext(filename)output_path=os.path.join(output_dir,'crop_'+filename+file_extension)# Enregistrer l'image recadrée avec le contour détectécv2.imwrite(output_path,cropped_image)print("Image recadrée avec succès. Chemin d'enregistrement:",output_path)if__name__=="__main__":# Vérifier si un argument a été fourniiflen(sys.argv)!=2:print("Usage: python script.py <image_path>")sys.exit(1)# Récupérer le chemin de l'image à partir des arguments de la ligne de commandeimage_path=sys.argv[1]# Appeler la fonction pour détecter le documentdetect_document(image_path)
# ChatGPT
Posté par zedS . En réponse au message Détourage scan depuis photo téléphone. Évalué à 3.
Je me réponds à moi même !
ChatGPT a une solution en python avec opencv, c'est super rapide. Par contre il me met un fond noir autour de la page détecté. Impossible de lui faire recadrer l'image sur la détection ou même remplacer le noir par du blanc.