我有一组300dpi的png图像。每个图像都充满了文字(不是手写的),数字(不是手写的)。
我想提取每个字符并将其保存在不同的图像中。 对于图像中的每个字符,l将其位置存储在csv文件中。
例如,在image1.png中,对于给定的字符“k”,l的位置为:
“k”=[left=656, right=736,top=144,down= 286]
是否有允许这样做的python库?作为输入l具有包含每个图像的每个字符的位置的图像(png格式)和csv文件。 在此行执行代码l stack之后:
img_charac=img[int(coords[2]):int(coords[3]),int(coords[0]):int(coords[1])]
我收到了以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object has no attribute '__getitem__'
答案 0 :(得分:3)
因此,如果我理解正确,这与图像处理,文件打开,图像裁剪和保存无关。
csv文件看起来像,
输入图像看起来像
import cv2
import numpy as np
import csv
path_csv= #path to your csv
#stock coordinates of characters from your csv in numpy array
npa=np.genfromtxt(path_csv+"cs.csv", delimiter=',',skip_header=1,usecols=(1,2,3,4))
nb_charac=len(npa[:, 0]) #number of characters
#stock the actual letters of your csv in an array
characs=[]
cpt=0
#take characters
f = open(path_csv+"cs.csv", 'rt')
reader = csv.reader(f)
for row in reader:
if cpt>=1: #skip header
characs.append(str(row[0]))
cpt+=1
#open your image
path_image= #path to your image
img=cv2.imread(path_image+"yourimagename.png")
path_save= #path you want to save to
#for every line on your csv,
for i in range(nb_charac):
#get coordinates
coords=npa[i,:]
charac=characs[i]
#actual cropping of the image (easy with numpy)
img_charac=img[int(coords[2]):int(coords[3]),int(coords[0]):int(coords[1])]
#saving the image
cv2.imwrite(path_save+"carac"+str(i)+"_"+str(charac)+".png",img_charac)
这有点快速和肮脏,例如csv开放有点乱(你可以通过一次打开和转换得到所有信息),并且应该适应你的csv文件。