python - 根据 csv 文件中的坐标从图像中裁剪片段
问题描述
我的图像由几个单元格组成(就像任何一般形式一样)。我在 csv 文件中获得了坐标,其中包含我需要裁剪的部分图像的 roi,并将其保存为一个新文件,其中图像文件名作为文件夹名称,坐标单元名称作为图像文件夹中的图像名称。
我能够使用 pil 库中的裁剪单独裁剪图像,但我不确定如何从图像中提取多个单元格的坐标数据,并基于图像中的裁剪 roi。
import glob,os,sys
from PIL import Image
class ROIExtraction:
def readImages(inputFolder):
ext = ['.png', '.jpg', '.gif', '.jpeg', '.tif', '.tiff']
files = []
path = inputFolder + "/*.*"
files = glob.glob(path)
imageFiles=[]
for i in files:
exten=os.path.splitext(i)[1]
if exten in ext:
imageFiles.append(i)
return imageFiles
def processRoi(imageFiles):
for imagePath in imageFiles:
img_name = os.path.splitext(os.path.basename(imagePath))[0]
output_folder = sys.argv[2]+'/'+img_name+'/'
os.makedirs(output_folder, exist_ok=True)
# import image
image = Image.open(imagePath)
img2 = image.crop((1385,45,2256,149))
img2.show()
img2.save(output_folder+'{}.png')
imageFiles = ROIExtraction.readImages(sys.argv[1])
ROIExtraction.processRoi(imageFiles)
在上面的代码中,我手动放置了坐标,但我想编写一个程序,从 csv 文件中提取坐标,并在此基础上从图像中裁剪 roi。
这是csv文件内容的示例-
SERIAL_NO|N|1385,45,871,104|1|?
CUST_ID|N|1704,211,552,71|1|?
PROD_TYPE|A|367,286,1167,74|1|?
BRANCH_CODE|N|1892,429,254,74|1|?
CONSTITUION|C|279,1355,85,62-539,1355,75,59-757,1352,72,62-884,1352,52,55-998,1352,68,55-1310,1352,68,49-1596,1349,65,55-1762,1352,68,49-1905,1352,69,52-2113,1352,62,49-78,1423,61,49-282,1410,78,65-432,1417,68,58-656,1417,78,55-969,1414,71,61-1222,1414,72,55-1391,1414,78,55|1|Sole proprietor?Partnership?LLP?HUF?Private Ltd Company?Public Ltd Company?Society?Trust?NGO/NPO?SHG?Association?Club?University?Government Body?Financial Inst?Bank?JLG?
ACTIVITY|C|221,1498,71,52-400,1498,71,52-552,1495,59,45-702,1498,65,49-881,1495,62,49-1043,1495,69,52-1252,1495,58,42-1473,1495,75,49-1671,1495,65,52-1935,1485,74,59-224,1563,65,49-734,1553,59,52-1056,1557,62,45|1|Agri?Mfg?Trade?Finance?Bank?Transport?Services?Govt?Real Estate?Stock Broker?Jewels/Gems/Precious Metal dealer?Money Services?Others (specify)?
NAME_AUTH_SIG1|A|97,1713,1327,65|1|?
解决方案
path ="csv.csv"
file = open(path)
for line in file.readlines():
tmp = line.split("|")
name = tmp[0]
cord = tmp[3]
all_snp_cord = cord.split("-")
for snp_cord in all_snp_cord:
snippet = snp_cord.split(",")
#do somthing with cordinats
推荐阅读
- c# - 在平面文件连接器上设置行分隔符属性
- date - Unix 日期程序,嵌套 if 语句说明现在是什么时间,并根据时间回显一行
- docker - docker 容器中 jenkins 的卷权限错误
- java - 如何通过单击 Java Fx 中的链接来确认用户
- dictionary - 如何在 Object Pascal 中将项目插入字典?
- java - 将 java 连接到 Microsoft Access 数据库
- ocaml - (Ocaml) 如何仅使用 List.hd、List.tl 和 List.length 从列表中删除所有其他元素
- laravel - AWS 服务器上的 Laravel 不返回 Set-Cookie 标头
- javascript - 我对此代码中的 keys() 部分感到困惑,例如在扩展数组之后 keys() 用于什么?
- bash - 如何使用 ${{ 每个 p in parameters.param }} 将“p”的当前值传递给 Azure 管道中的 bash 脚本?