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

Résolu
rose2022 Messages postés 20 Statut Membre -  
rose2022 Messages postés 20 Statut Membre -

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

  1. PierrotLeFou
     

    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
    1. rose2022 Messages postés 20 Statut Membre 1
       

      bonsoir

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

      good night

      0
  2. PierrotLeFou
     

    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
  3. Diablo76
     

    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
    1. rose2022 Messages postés 20 Statut Membre 1
       

      bonsoir

      je te remercie bcp

      problème résolu

      salutations

      0
  4. rose2022 Messages postés 20 Statut Membre 1
     

    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