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

Résolu

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. 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. bonsoir

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

      good night

      0
  2. 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
    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
      1. bonsoir

        je te remercie bcp

        problème résolu

        salutations

        0
    2. 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