скрипт, который берет изображения из заданной папки и выводит текстовый файл, содержащий периметр поражения в каждом изображении с обработкой ошибок - PullRequest
0 голосов
/ 17 апреля 2019

Я работаю над сценарием, который берет изображения (изображения рака кожи) из заданного каталога (5000 изображений), находит поражение на каждом изображении и находит периметр этого поражения. затем он выводит мне текстовый файл, содержащий название изображения, его номер и периметр. но после запуска кода выходной файл хранит только эти вещи только для 300 изображений, и он не может найти повреждение (найти контур поражения и площадь контура) некоторых изображений, поэтому он выдает ошибку и не завершить к другому изображению .. Я хочу, чтобы он записал «ошибка», если есть ошибка, и завершить к другим изображениям .. (Я хочу, чтобы он не останавливался, если есть ошибка с изображением и) я изменяю код, используя try, кроме оператора, но он пишет «ошибка» для всех изображений .. это код, который я написал:

def get_contours(img):
   #Convert the image to grayscale
   gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
   #Threshold the input image
   ret,thresh=cv2.threshold(gray,127,255,0)
   #erode then dilate image to make the lesion black and the skin white
   kernel=np.ones((5,5),np.uint8)
   img_erosion=cv2.erode(thresh,kernel,iterations=2)
   img_dilation=cv2.dilate(img_erosion,kernel,iterations=2)
   #Find the contours in the image      im2,contours,hierarchy=cv2.findContours(img_dilation,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
   #Extract the relevant contour based on area ratio.
   #This area ratio threshold will ensure that we only take the contour inside the image.
   for contour in contours:
      area=cv2.contourArea(contour)
      img_area=img.shape[0]*img.shape[1]
      if 0.0001<area/float(img_area)<0.8:
         return contour
if __name__=='__main__':
    f=open('imgs.txt','a+')
    f.write("image \t perimeter\t  \n")
    for extension in ["jpg",'png']:
        i=1
        for imgfile in glob.glob("HAM10000_images_part_1/*."+extension):
            try:
                f=open('imgs.txt','a+')
                img=cv2.imread(imgfile)
                contour=get_contours(img)    
                perimeter=cv2.arcLength(contour,True)


                f.write('{}\t{}\t{}\t\n'.format(str(i),str(imgfile),str(perimeter)))
                i+=1
                f.write('\n')
                f.close()
            except:
                f=open('imgs.txt','a+')
                f.write("error \n")
                f.close()
...