Я работаю над сценарием, который берет изображения (изображения рака кожи) из заданного каталога (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()