0
respostas

Abrir imagem e arquivo de texto com mesmos nomes com Python

Olá, pessoal. Estou tendo dificuldades para fazer uma lógica que possa abrir uma imagem (usando o opencv) em um diretório e um arquivo de texto (txt) em outro. Preciso fazer um laço onde o programa abra a imagem com o mesmo nome do arquivo de texto (ou vice-versa). O objetivo aqui é, a partir de coordenadas dentro dos arquivos .txt, fazer um crop (cortar as imagens) com as regiões de interesse. A parte de cropar as imagens está dando certo, estou dificuldades em abrir as imagens com os respectivos arquivos de textos. Está dando apenas para a primeira imagem e o primeiro arquivo de texto. Obs: As imagens estão nomeadas apenas com números, começando do "1" (ex: 1, 2, 3...), assim como os respectivos arquivos de texto. Segue abaixo o codigo que estou tentando fazer, os comentarios são tecnicas que ja tentei anteriormente. Desde já, agradeço quem puder ajudar!

import cv2
import os
from imutils import paths
import shutil
import numpy
from os import listdir
from os.path import isfile, join

def CropEquipamentos():
    # imagemPath = list(paths.list_images('..\\Data Base\\teste\\teste1')) #diretório contendo as imagens positivas para treino
    imagemPath = '..\\Data Base\\teste\\teste1'
    onlyfiles = [f for f in listdir(imagemPath) if isfile(join(imagemPath, f))]
    # print(type(imagemPath))
    numero = 1
    if not os.path.exists('..\\Data Base\\teste\\outputs\\RF'):
        os.makedirs('..\\Data Base\\teste\\outputs\\RF')
    if not os.path.exists('..\\Data Base\\teste\\outputs\\RRU'):
        os.makedirs('..\\Data Base\\teste\\outputs\\RRU')
    if not os.path.exists('..\\Data Base\\teste\\outputs\\MW'):
        os.makedirs('..\\Data Base\\teste\\outputs\\MW')

    for i in range(0, len(onlyfiles)):
        img_height=0
        img_width=0
        #i.replace(i, "pos/"+str(numero)+".png")
        #shutil.copy(i, i.replace(i, "..\\Data Base\\teste\\teste1/"+str(numero)+".jpg"))
        # shutil.copy(i, i.replace(i, "..\\Data Base\\teste\\imagens" + str(numero) + ".jpg"))
        img = cv2.imread("..\\Data Base\\teste\\teste1" + str(numero) + ".jpg", cv2.IMREAD_COLOR)
        resized_image = cv2.resize(img, (400, 400))
        print(f'Imagem {numero}.')
        cv2.imshow(f'Imagem{numero}', resized_image)
        cv2.waitKey()
        # cv2.imshow('Teste',img)
        # cv2.waitKey()
        #print(img)
        img_height = img.shape[0]
        img_width = img.shape[1]
        # print(img_height)
        # print(img_width)
        arquivo = open("..\\Data Base\\teste\\marcacoes\\" + str(numero) + ".txt", 'r')
        rru = 1
        rf = 1
        mw = 1
        for lines in arquivo:
            classe = lines[0:2]
            x_centro = float(lines[3:11])
            y_centro = float(lines[12:20])
            width = float(lines[21:29])
            height = float(lines[30:38])
            print(classe)
            print(f'x={x_centro}, y={y_centro}, width={width}, hight={height}')
            y1 = int((y_centro-(height/2))*img_height)
            y2 = int((y_centro+(height/2))*img_height)
            x1 = int((x_centro-(width/2))*img_width)
            x2 = int((x_centro+(width/2))*img_width)
            # print(x1, x2, y1, y2)
            if (classe == '15'):
                print('O equipamento é um RRU\n')
                roi = img[y1:y2, x1:x2]
                # cv2.imshow('Teste',roi)
                cv2.imwrite("..\\Data Base\\teste\\outputs\\RRU\\" + str(numero) + "_RRU_" + str(rru) + ".jpg", roi)
                # cv2.waitKey()
                rru += 1
            elif (classe == '16'):
                print('O equipamento é um RF\n')
                roi = img[y1:y2, x1:x2]
                # cv2.imshow('Teste', roi)
                cv2.imwrite("..\\Data Base\\teste\\outputs\\RF\\" + str(numero) + "_RF_" + str(rf) + ".jpg", roi)
                # cv2.waitKey()
                rf += 1
            elif (classe == '17'):
                print('O equipamento é um MW\n')
                roi = img[y1:y2, x1:x2]
                # cv2.imshow('Teste', roi)
                cv2.imwrite("..\\Data Base\\teste\\outputs\\RF\\" + str(numero) + "_RF_" + str(mw) + ".jpg", roi)
                # cv2.waitKey()
                mw += 1
            # rru += 1
            # rf += 1
            # mw += 1

        #resized_image = cv2.resize(img, (200, 200))
        # cv2.imwrite("..\\Data Base\\teste\\outputs\\RF/" + str(numero) + ".jpg", img)
        #print(i.replace(i, "pos/"+str(numero)+".png"))

        numero += 1

CropEquipamentos()