def black_points(image, thresh=127): points = [] image = as_greyscale(image) data = np.array(image.getdata()) data.shape = image.size[:2] width, height = image.size[:2] for x in range(width): for y in range(height): if data[x][y] < thresh: points.append((y, x)) return points
stats_writer.writerow(row) def filename_or_file_at(file_path, default_name): if not file_path: return default_name elif os.path.isdir(file_path): return os.path.join(file_path, default_name) else: return file_path if __name__ == "__main__": try: args = parse_args() image = as_greyscale(Image.open(args.image)) image_name = base_name_no_ext(args.image) filters = read_filters(args.filters) except Exception as e: print e sys.exit(1) file_name = image_name + "-" + "-".join(map(base_name_no_ext, args.filters)) + ".csv" csv_out = sys.stdout if not args.output else open(filename_or_file_at(args.output, file_name), "w") yaml_out = None if not args.yaml else open(args.yaml, "w") main(image, image_name, args.rows, args.columns, filters, csv_out, yaml_out, args.save_cell_images, filter_image_name=args.filtered_image) if csv_out != sys.stdout: csv_out.close()
def as_black_and_white(image, split_point=128, contrast=False): image = as_greyscale(image) if contrast: image = ImageOps.autocontrast(image) image = Image.eval(image, lambda px: 0 if px < split_point else 255) return image.convert('1', dither=Image.NONE)