mirror of
				https://github.com/RetroDECK/ES-DE.git
				synced 2025-04-10 19:15:13 +00:00 
			
		
		
		
	
		
			
	
	
		
			114 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			114 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | # | ||
|  | #  File            : pycimg.py | ||
|  | #                    ( Python file ) | ||
|  | # | ||
|  | #  Description     : Show how to import .cimg and .cimgz files into python (numpy). | ||
|  | #                    This file is a part of the CImg Library project. | ||
|  | #                    ( http://cimg.eu ) | ||
|  | # | ||
|  | #  Copyright       : Antonio Albiol, Universidad Politecnica Valencia (SPAIN) | ||
|  | # | ||
|  | #                    In case of issues or comments contact Antonio Albiol at: | ||
|  | #                    aalbiol (at) dcom.upv.es | ||
|  | # | ||
|  | #  Licenses        : This file is 'dual-licensed', you have to choose one | ||
|  | #                    of the two licenses below to apply. | ||
|  | # | ||
|  | #                    CeCILL-C | ||
|  | #                    The CeCILL-C license is close to the GNU LGPL. | ||
|  | #                    ( http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html ) | ||
|  | # | ||
|  | #                or  CeCILL v2.1 | ||
|  | #                    The CeCILL license is compatible with the GNU GPL. | ||
|  | #                    ( http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html ) | ||
|  | # | ||
|  | #  This software is governed either by the CeCILL or the CeCILL-C license | ||
|  | #  under French law and abiding by the rules of distribution of free software. | ||
|  | #  You can  use, modify and or redistribute the software under the terms of | ||
|  | #  the CeCILL or CeCILL-C licenses as circulated by CEA, CNRS and INRIA | ||
|  | #  at the following URL: "http://www.cecill.info". | ||
|  | # | ||
|  | #  As a counterpart to the access to the source code and  rights to copy, | ||
|  | #  modify and redistribute granted by the license, users are provided only | ||
|  | #  with a limited warranty  and the software's author,  the holder of the | ||
|  | #  economic rights,  and the successive licensors  have only  limited | ||
|  | #  liability. | ||
|  | # | ||
|  | #  In this respect, the user's attention is drawn to the risks associated | ||
|  | #  with loading,  using,  modifying and/or developing or reproducing the | ||
|  | #  software by the user in light of its specific status of free software, | ||
|  | #  that may mean  that it is complicated to manipulate,  and  that  also | ||
|  | #  therefore means  that it is reserved for developers  and  experienced | ||
|  | #  professionals having in-depth computer knowledge. Users are therefore | ||
|  | #  encouraged to load and test the software's suitability as regards their | ||
|  | #  requirements in conditions enabling the security of their systems and/or | ||
|  | #  data to be ensured and,  more generally, to use and operate it in the | ||
|  | #  same conditions as regards security. | ||
|  | # | ||
|  | #  The fact that you are presently reading this means that you have had | ||
|  | #  knowledge of the CeCILL and CeCILL-C licenses and that you accept its terms. | ||
|  | # | ||
|  | 
 | ||
|  | import numpy as np | ||
|  | import zlib | ||
|  | import os | ||
|  | 
 | ||
|  | typesDict={'float':'float32' ,'double':'float64', | ||
|  | 'unsigned_short':'uint16','unsigned_char':'uint8', | ||
|  | 'int':'int32', 'short':'int16'} | ||
|  | 
 | ||
|  | def cimgread( filename ): | ||
|  |     """ USAGE: a= cimgread(filename)
 | ||
|  |     For CImg Images: | ||
|  |         * returns a npy array in the case of cimg | ||
|  |         * Supports compression | ||
|  |         * It squeezes singleton dimensions. If a CImg image has dimensions (w,h,1,c) | ||
|  |             the returned python object will have shape | ||
|  |                 a.shape --> (h,w,c) | ||
|  |         * a(y,x,z,c) to access one element | ||
|  |     For CImgList: | ||
|  |         * returns a list of npy arrays | ||
|  |         * if original CImgList has nimages, then | ||
|  |              len(a) --> nimages | ||
|  |         * To access one pixel of the j-th image use a[j](y,x,z,c) | ||
|  | 
 | ||
|  |         """
 | ||
|  | 
 | ||
|  |     basename, file_extension = os.path.splitext(filename) | ||
|  |     fa = open(filename, 'rb') | ||
|  | 
 | ||
|  |     out =[] | ||
|  |     line0 = fa.readline() #Endiannes | ||
|  |     tiposdato=line0.split() | ||
|  |     number_of_images=int(tiposdato[0]) | ||
|  |     datatypecimg=tiposdato[1].decode() | ||
|  |     endiannes = tiposdato[2] | ||
|  | 
 | ||
|  |     datatype = typesDict[datatypecimg]; | ||
|  | 
 | ||
|  |     for n in range(number_of_images): | ||
|  |         line1 = fa.readline() # Dimensions | ||
|  |         dimensiones = line1.split() | ||
|  |         width = int(dimensiones[0]); | ||
|  |         height = int(dimensiones[1]); | ||
|  |         depth = int(dimensiones[2]); | ||
|  |         spectrum = int(dimensiones[3]); | ||
|  | 
 | ||
|  |         if file_extension == '.cimgz': | ||
|  |             csize= int(dimensiones[4].decode()[1:]) | ||
|  |             data = fa.read(csize) | ||
|  |             data = zlib.decompress(data) | ||
|  |         else: | ||
|  |             data = fa.read(width*height*depth*spectrum*dtype(datatype).itemsize) | ||
|  | 
 | ||
|  |         flattened = np.frombuffer(data,dtype=datatype) | ||
|  | 
 | ||
|  |         cimg=flattened.reshape((spectrum,depth,height,width)) | ||
|  |         cimg=np.squeeze(np.transpose(cimg,(2,3,1,0))) | ||
|  |         out.append(cimg) | ||
|  | 
 | ||
|  |     fa.close() | ||
|  |     if len(out)==1: | ||
|  |         return out[0] | ||
|  |     return out |