首页 > 解决方案 > 根据 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|?

标签: pythonopencvcoordinatesimage-segmentationroi

解决方案


    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

推荐阅读