Erreur :AttributeError: 'NoneType' object has no attribute '

Résolu/Fermé
rose2022 Messages postés 20 Date d'inscription vendredi 21 octobre 2022 Statut Membre Dernière intervention 22 novembre 2022 - Modifié le 18 nov. 2022 à 20:38
rose2022 Messages postés 20 Date d'inscription vendredi 21 octobre 2022 Statut Membre Dernière intervention 22 novembre 2022 - 19 nov. 2022 à 23:49

Bonsoir

j'ai exécuté le code d'une m'étrique de qualité d"image psnr 

je comprends pas l'erreur ,a la ligne 13 j'ai besoin d'aide svp

erreur : ligne13 height, width, channel = s.shape

le code :

 
import math
import cv2
import csv
import os

def read_bmp(image_name):
   return cv2.imread(image_name+'.bmp')

def calculate_psnr(n):
   s = read_bmp('source/s'+n)
   r = read_bmp('recovery/rs'+n)

   height, width, channel = s.shape
   size = height*width

   sb,sg,sr = cv2.split(s)
   rb,rg,rr = cv2.split(r)

   mseb = ((sb-rb)**2).sum()
   mseg = ((sg-rg)**2).sum()
   mser = ((sr-rr)**2).sum()

   MSE = (mseb+mseg+mser)/(3*size)
   psnr = 10*math.log10(255**2/MSE)
   return round(psnr,2)

def write_csv(n,data):
   with open('PSNR-result/'+n+'.csv', 'w', newline='') as myfile:
      wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
      wr.writerow(data)

for i in range(6):
   print("Creating CSV of PSNR-result",i+1,"...",sep="")
   write_csv(str(i+1),[calculate_psnr(str(i+1))])

os.system("pause")

cordialement
Windows / Chrome 106.0.5249.168

4 réponses

La fonction read_bmp() ne retourne rien, donc elle retourne None
Donc, l'attribut shape ne s'applique à "rien"

Que retourne cv2.imread(image_name+'.bmp')  ?

1
rose2022 Messages postés 20 Date d'inscription vendredi 21 octobre 2022 Statut Membre Dernière intervention 22 novembre 2022 1
19 nov. 2022 à 23:49

bonsoir

merci bien j'ai compris qu'il faut enlever les paramètres 

good night

0
PierrotLeFou
19 nov. 2022 à 18:38

Moi non plus je ne comprend pas ...
Tu passes en paramètre à ta fonction PSNR les variables  s  et  r  et tu les redéfinis dans la fonction.
Ces objets ne semblent pas exister au moment de l'appel.

1

Salut,

s et r ne sont pas définis lors de l'appel mais dans la fonction, supprime les paramètres s et r 

def PSNR():
    ....


value = PSNR()
1
rose2022 Messages postés 20 Date d'inscription vendredi 21 octobre 2022 Statut Membre Dernière intervention 22 novembre 2022 1
19 nov. 2022 à 23:48

bonsoir

je te remercie bcp

problème résolu

salutations

0
rose2022 Messages postés 20 Date d'inscription vendredi 21 octobre 2022 Statut Membre Dernière intervention 22 novembre 2022 1
19 nov. 2022 à 15:16

bonjour 

j'ai corrigé le code pour l'importation des images mais j'ai encore un message d'erreur 

 value = PSNR(s, r)
NameError: name 's' is not defined

pourtant le s est definie comme image original

voici le code :




def PSNR(s, r):

   s = cv2.imread("original_image.png")
   r = cv2.imread("compressed_image.png")

   height, width, channel = s.shape
   size = height*width

   sb,sg,sr = cv2.split(s)
   rb,rg,rr = cv2.split(r)

   mseb = ((sb-rb)**2).sum()
   mseg = ((sg-rg)**2).sum()
   mser = ((sr-rr)**2).sum()

   MSE = (mseb+mseg+mser)/(3*size)
   psnr = 10*math.log10(255**2/MSE)
   return round(psnr,2)

def main():

    value = PSNR(s, r)
    # Affichage du psnr
    print(f"PSNR value is {value} dB")


if __name__ == "__main__":
    main()

que dois je comprendre ? un coup de main svp

merci 

cordialement

0