前提・実現したいこと
複数の画像に対してcv2.findContoursをかけたいのですが、
for文の処理の途中で止まってしまいます。
解決方法と、できればなぜ止まってしまうのか知りたいです。
該当のソースコード
python3
1import numpy as np 2import math 3import matplotlib.pyplot as plt 4from PIL import Image 5 6import glob 7import os 8import cv2 9import scipy 10import scipy.stats as stats 11from scipy.stats import kurtosis 12import pandas as pd 13import re 14import openpyxl 15from openpyxl.drawing.image import Image as xlImage 16import shutil 17 18import time 19from tqdm import tqdm 20import holoviews as hv 21from holoviews import opts 22hv.extension('bokeh') 23 24path = r"C:\Users\ysk\OneDrive\sample_im_reference_copy" 25new_dir = r'\area_std' 26 27if os.path.exists(path + new_dir) == 1: 28 shutil.rmtree(path + new_dir) 29else: 30 pass 31 32os.mkdir(path + new_dir) 33os.mkdir(path + new_dir + r'\histgram') 34 35def make_im_list(path): 36 tif_list = glob.glob(path + "/*.tif") 37 tif_list.sort(reverse=False) 38 return tif_list 39 40tif_list = make_im_list(path) 41 42def make_area_list(contour): 43 area_list = [] 44 for cnt in contours: 45 area = cv2.contourArea(cnt) 46 area_list.append(area) 47 return area_list 48 49mean_list = [] 50std_list = [] 51 52for i in tqdm(tif_list): 53 print(i) 54 im = np.array(Image.open(i)) 55 im_inv = 255 - im 56 ret,im_th = cv2.threshold(im_inv, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) 57 contours, hierarchy = cv2.findContours(im_th, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) 58 area_list = make_area_list(contours) 59 area_array = np.array(area_list) 60 mean_list.append(area_array.mean()) 61 std_list.append(area_array.std())
試したこと
###試したこと①
tqdmで処理状況を確認すると、33%程度進むと処理が一度停止し、
しばらく待つと処理が再スタートするのですが、67%程度で再度処理が止まり、そこから動くことはありませんでした。
33%、67%まで処理が進んだ時に処理をしている画像を確認しましたが、ほかの画像と特に違う点は見つかりません。
###試したこと②
contours, hierarchy = cv2.findContours(im_th, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
によって発生するcontours, hierarchyがメモリを圧迫している?かもしれないと考えて、
以下のように contours = [] と hierarchy = [] を付け足し、毎回 contours, hierarchy を空っぽにしようとしましたが、特に変化なく処理が止まってしまいました。
###試したこと③
33%、67%の際に処理していた画像のみに処理をかけると止まってしまったので、その画像に問題があるようです。
問題の画像と、そうでない画像のプロパティを確認しても特に違いがありませんでした。
フォトのアプリで表示しても見た目に大きな違いもありません。
補足情報(FW/ツールのバージョンなど)
python 3.6.9
opencv 4.1.2
回答1件
あなたの回答
tips
プレビュー