Interface terminée~90, addition, soustraction d'images ... bruits à avancer
This commit is contained in:
parent
8e517ce681
commit
cdda99c423
|
@ -102,9 +102,49 @@ class BMPHeader:
|
||||||
self.binData += chr( byte )
|
self.binData += chr( byte )
|
||||||
|
|
||||||
|
|
||||||
# Affiche au format humain, toutes les infos du header
|
# Retourne au format humain, toutes les infos du header
|
||||||
def info(self, type=0): # 0 = int, 1 = hex
|
def info(self, type=0): # 0 = int, 1 = hex
|
||||||
|
|
||||||
|
returnStr = ""
|
||||||
|
|
||||||
|
if type == 0: # si int
|
||||||
|
def displayType(value):
|
||||||
|
return value
|
||||||
|
else:
|
||||||
|
def displayType(value):
|
||||||
|
return hex(value)
|
||||||
|
|
||||||
|
returnStr += "\n"
|
||||||
|
returnStr += "INFORMATION DU HEADER\n"
|
||||||
|
returnStr += "=====================\n"
|
||||||
|
returnStr += "signature: %s\n" % displayType( self.signature )
|
||||||
|
returnStr += "taille du fichier: %s\n" % displayType( self.fileSize )
|
||||||
|
returnStr += "offset du contenu: %s\n" % displayType( self.offset )
|
||||||
|
returnStr += "taille infoHeader: %s\n" % displayType( self.infoSize )
|
||||||
|
returnStr += "largeur: %s\n" % displayType( self.width )
|
||||||
|
returnStr += "hauteur: %s\n" % displayType( self.height )
|
||||||
|
returnStr += "nombre de plans: %s\n" % displayType( self.plans )
|
||||||
|
returnStr += "bits par pixel: %s\n" % displayType( self.bpp )
|
||||||
|
returnStr += "type compression: %s\n" % displayType( self.compType )
|
||||||
|
returnStr += "taille(+padding): %s\n" % displayType( self.size )
|
||||||
|
returnStr += "horizontal resol: %s\n" % displayType( self.horiRes )
|
||||||
|
returnStr += "vertical resol: %s\n" % displayType( self.vertRes )
|
||||||
|
returnStr += "nombre de couleur: %s\n" % displayType( self.colorNb )
|
||||||
|
returnStr += "nb couleurs impor: %s\n" % displayType( self.colorINb )
|
||||||
|
returnStr += "=====================\n"
|
||||||
|
returnStr += "INFORMATIONS COMP.\n"
|
||||||
|
returnStr += "=====================\n"
|
||||||
|
returnStr += "rowsize: %s\n" % displayType( self.rowSize )
|
||||||
|
returnStr += "padding: %s\n" % displayType( self.padding )
|
||||||
|
returnStr += "=====================\n"
|
||||||
|
returnStr += "\n"
|
||||||
|
|
||||||
|
return returnStr
|
||||||
|
|
||||||
|
|
||||||
|
# Affiche au format humain, toutes les infos du header
|
||||||
|
def printInfo(self, type=0): # 0 = int, 1 = hex
|
||||||
|
|
||||||
if type == 0: # si int
|
if type == 0: # si int
|
||||||
def displayType(value):
|
def displayType(value):
|
||||||
return value
|
return value
|
||||||
|
|
19
code/bmp.py
19
code/bmp.py
|
@ -20,7 +20,9 @@ if len(sys.argv) < 3:
|
||||||
################" INTERFACE "###################
|
################" INTERFACE "###################
|
||||||
|
|
||||||
print "+-------------------------+"
|
print "+-------------------------+"
|
||||||
|
print "| |"
|
||||||
print "| TRAITEMENT D'IMAGE |"
|
print "| TRAITEMENT D'IMAGE |"
|
||||||
|
print "| |"
|
||||||
print "+-------------------------+"
|
print "+-------------------------+"
|
||||||
print "| <in> %s |" % exactLength( sys.argv[1], 17, -1)
|
print "| <in> %s |" % exactLength( sys.argv[1], 17, -1)
|
||||||
print "| <out> %s |" % exactLength( sys.argv[2], 17, -1)
|
print "| <out> %s |" % exactLength( sys.argv[2], 17, -1)
|
||||||
|
@ -40,12 +42,13 @@ print "| %s |" % exactLength("TESTS DE DIFFERENCES", 23, 0)
|
||||||
print "| %s |" % exactLength("", 23, 0)
|
print "| %s |" % exactLength("", 23, 0)
|
||||||
print "| 5) %s |" % exactLength("Difference en %", 20, -1)
|
print "| 5) %s |" % exactLength("Difference en %", 20, -1)
|
||||||
print "| 6) %s |" % exactLength("Difference en image", 20, -1)
|
print "| 6) %s |" % exactLength("Difference en image", 20, -1)
|
||||||
print "| 7) %s |" % exactLength("Fusion d'images", 20, -1)
|
print "| 7) %s |" % exactLength("Fusion d'images (+)", 20, -1)
|
||||||
|
print "| 8) %s |" % exactLength("Fusion d'images (-)", 20, -1)
|
||||||
print "+-------------------------+"
|
print "+-------------------------+"
|
||||||
print
|
print
|
||||||
while True:
|
while True:
|
||||||
action = int( raw_input("choix: ") )
|
action = int( raw_input("choix: ") )
|
||||||
if action >= 0 and action <= 7:
|
if action >= 0 and action <= 8:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
print
|
print
|
||||||
|
@ -53,12 +56,14 @@ print "+-------------------------+---------+"
|
||||||
|
|
||||||
execTime = Timer(); execTime.reset();
|
execTime = Timer(); execTime.reset();
|
||||||
|
|
||||||
|
result = ""
|
||||||
|
|
||||||
if action == 0:
|
if action == 0:
|
||||||
testManualCreation() # teste la création d'un fichier à partir d'une matrice uniquement
|
testManualCreation() # teste la création d'un fichier à partir d'une matrice uniquement
|
||||||
elif action == 1:
|
elif action == 1:
|
||||||
testFileIntegrity() # teste le PARSE/UNPARSE
|
result = testFileIntegrity() # teste le PARSE/UNPARSE
|
||||||
elif action == 2:
|
elif action == 2:
|
||||||
printIntPalette() # affiche la palette d'une image
|
result = printIntPalette() # affiche la palette d'une image
|
||||||
elif action == 3:
|
elif action == 3:
|
||||||
testSaltAndPepper() # teste le bruitage/débruitage de type "Sel & Poivre"
|
testSaltAndPepper() # teste le bruitage/débruitage de type "Sel & Poivre"
|
||||||
elif action == 4:
|
elif action == 4:
|
||||||
|
@ -68,13 +73,17 @@ elif action == 5:
|
||||||
elif action == 6:
|
elif action == 6:
|
||||||
imageForImageQuality() # crée une image correspondant aux différences de 2 images
|
imageForImageQuality() # crée une image correspondant aux différences de 2 images
|
||||||
elif action == 7:
|
elif action == 7:
|
||||||
mergeImages() # crée une image étant la fusion (addition) de 2 images
|
mergeImagesAdditive() # crée une image étant la fusion (addition) de 2 images
|
||||||
|
elif action == 8:
|
||||||
|
mergeImagesSubstractive() # crée une image étant la fusion (soustractive) de 2 images
|
||||||
else:
|
else:
|
||||||
print "Error! aborting"
|
print "Error! aborting"
|
||||||
|
|
||||||
print "+-------------------------+---------+"
|
print "+-------------------------+---------+"
|
||||||
print "| EXECUTION TIME | %s |" % execTime.get()
|
print "| EXECUTION TIME | %s |" % execTime.get()
|
||||||
print "+-------------------------+---------+"
|
print "+-------------------------+---------+"
|
||||||
|
print
|
||||||
|
print result
|
||||||
|
|
||||||
############ TESTS ############
|
############ TESTS ############
|
||||||
|
|
||||||
|
|
173
code/tests.py
173
code/tests.py
|
@ -89,10 +89,10 @@ def exactLength(text, length, position=0):
|
||||||
def testFileIntegrity():
|
def testFileIntegrity():
|
||||||
|
|
||||||
t = Timer();
|
t = Timer();
|
||||||
|
returnValue = ""
|
||||||
|
|
||||||
# lecture du fichier
|
# lecture du fichier
|
||||||
print "Reading Image -",; t.reset();
|
print "| Reading Image |",; t.reset();
|
||||||
with open( sys.argv[1] ) as file:
|
with open( sys.argv[1] ) as file:
|
||||||
binFile = file.read()
|
binFile = file.read()
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
@ -102,38 +102,40 @@ def testFileIntegrity():
|
||||||
|
|
||||||
|
|
||||||
# Parsing
|
# Parsing
|
||||||
print "Parsing file -",; t.reset();
|
print "| Parsing file |",; t.reset();
|
||||||
img.parse( binFile );
|
img.parse( binFile );
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
img.header.info();
|
returnValue += img.header.info();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Unparsing
|
# Unparsing
|
||||||
print "Unparsing file -",; t.reset();
|
print "| Unparsing file |",; t.reset();
|
||||||
img.unparse();
|
img.unparse();
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
# Writing
|
# Writing
|
||||||
print "Writing file -",; t.reset();
|
print "| Writing file |",; t.reset();
|
||||||
img.write( sys.argv[2] )
|
img.write( sys.argv[2] )
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
# lecture du fichier
|
# lecture du fichier
|
||||||
print "Reading Image -",; t.reset();
|
print "| Reading Image |",; t.reset();
|
||||||
with open( sys.argv[2] ) as file:
|
with open( sys.argv[2] ) as file:
|
||||||
binFile = file.read()
|
binFile = file.read()
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
# Parsing
|
# Parsing
|
||||||
print "Parsing file -",; t.reset();
|
print "| Parsing file |",; t.reset();
|
||||||
img.parse( binFile );
|
img.parse( binFile );
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
img.header.info();
|
returnValue += "\n\n\n" + img.header.info();
|
||||||
|
|
||||||
|
return returnValue;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -175,7 +177,7 @@ def testSaltAndPepper():
|
||||||
|
|
||||||
|
|
||||||
print "| Creating Salt&Pepper |",; t.reset();
|
print "| Creating Salt&Pepper |",; t.reset();
|
||||||
noise.SaltAndPepper_set(img.content.map, seuil=50)
|
noise.SaltAndPepper_set(img.content.map, seuil=20)
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
# Unparsing
|
# Unparsing
|
||||||
|
@ -299,6 +301,10 @@ def testAdditiveNoise():
|
||||||
# Unparse une matrice de pixels aléatoire de taille 100x100
|
# Unparse une matrice de pixels aléatoire de taille 100x100
|
||||||
# L'enregistre dans le fichier de sortie
|
# L'enregistre dans le fichier de sortie
|
||||||
def testManualCreation():
|
def testManualCreation():
|
||||||
|
|
||||||
|
t = Timer();
|
||||||
|
|
||||||
|
print "| Creating Image |",; t.reset();
|
||||||
img = BMPFile()
|
img = BMPFile()
|
||||||
for y in range(0, 100):
|
for y in range(0, 100):
|
||||||
img.content.map.append( [] )
|
img.content.map.append( [] )
|
||||||
|
@ -311,9 +317,12 @@ def testManualCreation():
|
||||||
) );
|
) );
|
||||||
|
|
||||||
img.unparse();
|
img.unparse();
|
||||||
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
|
|
||||||
|
print "| Writing Image |",; t.reset();
|
||||||
img.write( sys.argv[2] )
|
img.write( sys.argv[2] )
|
||||||
# print img.binData
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -328,13 +337,19 @@ def testManualCreation():
|
||||||
def printIntPalette():
|
def printIntPalette():
|
||||||
img = BMPFile();
|
img = BMPFile();
|
||||||
|
|
||||||
# lecture du fichier
|
t = Timer();
|
||||||
|
|
||||||
|
print "| Reading Image |",; t.reset();
|
||||||
with open( sys.argv[1] ) as file:
|
with open( sys.argv[1] ) as file:
|
||||||
binFile = file.read()
|
binFile = file.read()
|
||||||
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
|
|
||||||
|
print "| Parsing File |",; t.reset();
|
||||||
img.parse(binFile);
|
img.parse(binFile);
|
||||||
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
print img.intPalette;
|
return img.intPalette;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -401,8 +416,8 @@ def printImageQuality():
|
||||||
percentage = int(100*percentage)/100.0
|
percentage = int(100*percentage)/100.0
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
print "+-------------------------+"
|
print "+-------------------------+"
|
||||||
print "| Commun = %s |" % exactLength( str(percentage)+"%", 10, -1 );
|
print "| Commun = %s | |" % exactLength( str(percentage)+"%", 10, -1 );
|
||||||
print "| Difference = %s |" % exactLength( str(100-percentage)+"%", 10, -1 );
|
print "| Difference = %s | |" % exactLength( str(100-percentage)+"%", 10, -1 );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -425,7 +440,7 @@ def imageForImageQuality():
|
||||||
|
|
||||||
|
|
||||||
# lecture des fichiers
|
# lecture des fichiers
|
||||||
print "Reading files -",; t.reset();
|
print "| Reading files |",; t.reset();
|
||||||
with open( sys.argv[1] ) as f:
|
with open( sys.argv[1] ) as f:
|
||||||
imageFile = f.read();
|
imageFile = f.read();
|
||||||
with open( sys.argv[2] ) as f:
|
with open( sys.argv[2] ) as f:
|
||||||
|
@ -433,7 +448,7 @@ def imageForImageQuality():
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
# parsage
|
# parsage
|
||||||
print "Parsing images -",; t.reset();
|
print "| Parsing images |",; t.reset();
|
||||||
image.parse( imageFile );
|
image.parse( imageFile );
|
||||||
model.parse( modelFile );
|
model.parse( modelFile );
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
@ -448,7 +463,7 @@ def imageForImageQuality():
|
||||||
|
|
||||||
|
|
||||||
# comparaison
|
# comparaison
|
||||||
print "Comparaison -",; t.reset();
|
print "| Comparaison |",; t.reset();
|
||||||
count, totalCount = [0,0,0], imagePixelCount*256*3
|
count, totalCount = [0,0,0], imagePixelCount*256*3
|
||||||
for y in range(0, image.header.height):
|
for y in range(0, image.header.height):
|
||||||
newImg.content.map.append( [] );
|
newImg.content.map.append( [] );
|
||||||
|
@ -458,13 +473,13 @@ def imageForImageQuality():
|
||||||
255 - abs( image.content.map[y][x].g - model.content.map[y][x].g ),
|
255 - abs( image.content.map[y][x].g - model.content.map[y][x].g ),
|
||||||
255 - abs( image.content.map[y][x].b - model.content.map[y][x].b )
|
255 - abs( image.content.map[y][x].b - model.content.map[y][x].b )
|
||||||
) )
|
) )
|
||||||
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
|
print "| Unparsing |",; t.reset();
|
||||||
print "Unparsing -",; t.reset();
|
|
||||||
newImg.unparse();
|
newImg.unparse();
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
print "Writing File -",; t.reset();
|
print "| Writing File |",; t.reset();
|
||||||
with open("compare.bmp", "w") as f:
|
with open("compare.bmp", "w") as f:
|
||||||
f.write( newImg.binData );
|
f.write( newImg.binData );
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
@ -482,61 +497,61 @@ def imageForImageQuality():
|
||||||
# @sysarg 1 le fichier A
|
# @sysarg 1 le fichier A
|
||||||
# @stsarg 2 le fichier B
|
# @stsarg 2 le fichier B
|
||||||
#
|
#
|
||||||
# @file merge.bmp le fichier bruité
|
# @file merge.bmp le fichier résultant
|
||||||
#
|
#
|
||||||
# @history
|
# @history
|
||||||
# Parse les fichiers A et B
|
# Parse les fichiers A et B
|
||||||
# Créer la matrice de pixels à partir de l'addition de A et B
|
# Créer la matrice de pixels à partir de l'addition de A et B
|
||||||
# Unparse le tout et l'enregistre dans merge.bmp
|
# Unparse le tout et l'enregistre dans mergeAdd.bmp
|
||||||
def mergeImages():
|
def mergeImagesAdditive():
|
||||||
t = Timer();
|
t = Timer();
|
||||||
imageFile, modelFile = "", ""
|
imageFile, modelFile = "", ""
|
||||||
image, model, newImg = BMPFile(), BMPFile(), BMPFile()
|
A, B, newImg = BMPFile(), BMPFile(), BMPFile()
|
||||||
|
|
||||||
|
|
||||||
# lecture des fichiers
|
# lecture des fichiers
|
||||||
print "Reading files -",; t.reset();
|
print "| Reading files |",; t.reset();
|
||||||
with open( sys.argv[1] ) as f:
|
with open( sys.argv[1] ) as f:
|
||||||
imageFile = f.read();
|
AFile = f.read();
|
||||||
with open( sys.argv[2] ) as f:
|
with open( sys.argv[2] ) as f:
|
||||||
modelFile = f.read();
|
BFile = f.read();
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
# parsage
|
# parsage
|
||||||
print "Parsing images -",; t.reset();
|
print "| Parsing images |",; t.reset();
|
||||||
image.parse( imageFile );
|
A.parse( AFile );
|
||||||
model.parse( modelFile );
|
B.parse( BFile );
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
|
|
||||||
# condition
|
# condition
|
||||||
imagePixelCount = image.header.width * image.header.height
|
APixelCount = A.header.width * A.header.height
|
||||||
modelPixelCount = model.header.width * model.header.height
|
BPixelCount = B.header.width * B.header.height
|
||||||
|
|
||||||
if imagePixelCount != modelPixelCount:
|
if APixelCount != BPixelCount:
|
||||||
print "*** Taille de images différentes"
|
print "*** Taille de images différentes"
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
|
|
||||||
# comparaison
|
# comparaison
|
||||||
print "Merging -",; t.reset();
|
print "| Merging |",; t.reset();
|
||||||
for y in range(0, image.header.height):
|
for y in range(0, A.header.height):
|
||||||
newImg.content.map.append( [] );
|
newImg.content.map.append( [] );
|
||||||
for x in range(0, image.header.width):
|
for x in range(0, A.header.width):
|
||||||
newImg.content.map[y].append( RGBPixel(
|
newImg.content.map[y].append( RGBPixel(
|
||||||
( image.content.map[y][x].r + model.content.map[y][x].r ) % 256,
|
( A.content.map[y][x].r + B.content.map[y][x].r ) / 2, # moyenne du rouge
|
||||||
( image.content.map[y][x].g + model.content.map[y][x].g ) % 256,
|
( A.content.map[y][x].g + B.content.map[y][x].g ) / 2, # moyenne du vert
|
||||||
( image.content.map[y][x].b + model.content.map[y][x].b ) % 256
|
( A.content.map[y][x].b + B.content.map[y][x].b ) / 2 # moyenne du bleu
|
||||||
) )
|
) )
|
||||||
|
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
print "Unparsing -",; t.reset();
|
print "| Unparsing |",; t.reset();
|
||||||
newImg.unparse(newBpp=24);
|
newImg.unparse(newBpp=24);
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
print "Writing File -",; t.reset();
|
print "| Writing File |",; t.reset();
|
||||||
with open("merge.bmp", "w") as f:
|
with open("mergeAdd.bmp", "w") as f:
|
||||||
f.write( newImg.binData );
|
f.write( newImg.binData );
|
||||||
print "%s |" % (t.get())
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
|
@ -548,6 +563,74 @@ def mergeImages():
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Fusionne 2 images (soustraction uniquement) #
|
||||||
|
###############################################
|
||||||
|
# @sysarg 1 le fichier A
|
||||||
|
# @stsarg 2 le fichier B
|
||||||
|
#
|
||||||
|
# @file mergeSub.bmp le fichier résultant
|
||||||
|
#
|
||||||
|
# @history
|
||||||
|
# Parse les fichiers A et B
|
||||||
|
# Créer la matrice de pixels à partir de l'addition de A et B
|
||||||
|
# Unparse le tout et l'enregistre dans mergeSub.bmp
|
||||||
|
def mergeImagesSubstractive():
|
||||||
|
t = Timer();
|
||||||
|
imageFile, modelFile = "", ""
|
||||||
|
A, B, newImg = BMPFile(), BMPFile(), BMPFile()
|
||||||
|
|
||||||
|
|
||||||
|
# lecture des fichiers
|
||||||
|
print "| Reading files |",; t.reset();
|
||||||
|
with open( sys.argv[1] ) as f:
|
||||||
|
AFile = f.read();
|
||||||
|
with open( sys.argv[2] ) as f:
|
||||||
|
BFile = f.read();
|
||||||
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
|
# parsage
|
||||||
|
print "| Parsing images |",; t.reset();
|
||||||
|
A.parse( AFile );
|
||||||
|
B.parse( BFile );
|
||||||
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
|
|
||||||
|
# condition
|
||||||
|
APixelCount = A.header.width * A.header.height
|
||||||
|
BPixelCount = B.header.width * B.header.height
|
||||||
|
|
||||||
|
if APixelCount != BPixelCount:
|
||||||
|
print "*** Taille de images différentes"
|
||||||
|
exit()
|
||||||
|
|
||||||
|
|
||||||
|
# comparaison
|
||||||
|
print "| Merging |",; t.reset();
|
||||||
|
for y in range(0, A.header.height):
|
||||||
|
newImg.content.map.append( [] );
|
||||||
|
for x in range(0, A.header.width):
|
||||||
|
newImg.content.map[y].append( RGBPixel(
|
||||||
|
( A.content.map[y][x].r - B.content.map[y][x].r ) % 256, # moyenne du rouge
|
||||||
|
( A.content.map[y][x].g - B.content.map[y][x].g ) % 256, # moyenne du vert
|
||||||
|
( A.content.map[y][x].b - B.content.map[y][x].b ) % 256 # moyenne du bleu
|
||||||
|
) )
|
||||||
|
|
||||||
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
|
print "| Unparsing |",; t.reset();
|
||||||
|
newImg.unparse(newBpp=24);
|
||||||
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
|
print "| Writing File |",; t.reset();
|
||||||
|
with open("mergeSub.bmp", "w") as f:
|
||||||
|
f.write( newImg.binData );
|
||||||
|
print "%s |" % (t.get())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -594,7 +677,3 @@ def calSaltAndPepper():
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue