Posteriormente a consultar especialistas en esta materia, programadores de diversas áreas y maestros dimos con la respuesta al dilema y la dejamos plasmada en esta publicación.
Solución:
A partir de su pregunta, creo que quiere saber acerca de numpy.flatten()
. quieres agregar
value = value.flatten()
justo antes de su llamada np.savetxt. Aplanará el array a una sola dimensión y luego debe imprimirse como una sola línea.
El resto de su pregunta no está claro, pero implica que tiene un directorio lleno de imágenes jpeg y desea una forma de leerlas todas. Así que primero, obtenga una lista de archivos:
def createFileList(myDir, format='.jpg'):
fileList = []
print(myDir)
for root, dirs, files in os.walk(myDir, topdown=False):
for name in files:
if name.endswith(format):
fullName = os.path.join(root, name)
fileList.append(fullName)
return fileList
El rodea tu código con un for fileName in fileList:
Editado para agregar un ejemplo completo
Tenga en cuenta que he usado el escritor csv y cambié su float64 a ints (que debería estar bien ya que los datos de píxeles son 0-255
from PIL import Image
import numpy as np
import sys
import os
import csv
#Useful function
def createFileList(myDir, format='.jpg'):
fileList = []
print(myDir)
for root, dirs, files in os.walk(myDir, topdown=False):
for name in files:
if name.endswith(format):
fullName = os.path.join(root, name)
fileList.append(fullName)
return fileList
# load the original image
myFileList = createFileList('path/to/directory/')
for file in myFileList:
print(file)
img_file = Image.open(file)
# img_file.show()
# get original image parameters...
width, height = img_file.size
format = img_file.format
mode = img_file.mode
# Make image Greyscale
img_grey = img_file.convert('L')
#img_grey.save('result.png')
#img_grey.show()
# Save Greyscale values
value = np.asarray(img_grey.getdata(), dtype=np.int).reshape((img_grey.size[1], img_grey.size[0]))
value = value.flatten()
print(value)
with open("img_pixels.csv", 'a') as f:
writer = csv.writer(f)
writer.writerow(value)
¿Qué tal si convierte sus imágenes en matrices numpy 2D y luego las escribe como archivos txt con .csv extensiones y , como delimitadores?
Tal vez podrías usar un código como el siguiente:
np.savetxt('np.csv', image, delimiter=',')
import numpy as np
import cv2
import os
IMG_DIR = '/home/kushal/Documents/opencv_tutorials/image_reading/dataset'
for img in os.listdir(IMG_DIR):
img_array = cv2.imread(os.path.join(IMG_DIR,img), cv2.IMREAD_GRAYSCALE)
img_array = (img_array.flatten())
img_array = img_array.reshape(-1, 1).T
print(img_array)
with open('output.csv', 'ab') as f:
np.savetxt(f, img_array, delimiter=",")
Te invitamos a añadir valor a nuestra información tributando tu experiencia en las acotaciones.