Skalakan dan Simpan Gambar (AttributeError: objek 'NoneType' tidak memiliki atribut 'bentuk')

Saya mencoba menskalakan dan menyimpan seribu gambar ke direktori.

Saya berhasil mengubah ukuran gambar. Namun, kesalahan terjadi saat menyimpan.

Kode ada di bawah. Tolong bantu saya.

import cv2
import numpy as np
import os

def scaling_shirink(addr):
    img = cv2.imread(addr)
    height, width = img.shape[:2]
    shrink = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
    cv2.imshow('Shrink', shrink)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

count = 0
IMAGE_DIR_BASE = 'C:/ClassShared\Data/CM_ML_IMG_181011/CASE_01/FPS_10_PNG'
image_file_list = os.listdir(IMAGE_DIR_BASE)
for file_name in image_file_list:
    image = scaling_shirink(IMAGE_DIR_BASE + '/' + file_name)
    cv2.imwrite('C:/ClassShared\Data/CM_ML_IMG_181011/CASE_01/34_sdetect_db1/' + '_' + "%04d" % (count) + '.png', image)
    count = count + 1

Pesan kesalahannya adalah sebagai berikut.

Traceback (most recent call last):
  File "C:/PycharmProjects/TS_S/Scailing.py", line 19, in <module>
    image = scaling_shirink(IMAGE_DIR_BASE + '/' + file_name)
  File "C:/PycharmProjects/TS_S/Scailing.py", line 8, in scaling_shirink
    height, width = img.shape[:2]
AttributeError: 'NoneType' object has no attribute 'shape'

Saya tidak mengerti mengapa dikatakan AttributeError: objek 'NoneType' tidak memiliki atribut 'bentuk'


person makatyu    schedule 15.10.2018    source sumber
comment
cv2.imread(addr) kembali None. Apakah Anda yakin addr benar? Apakah ada file non-gambar di direktori itu?   -  person John Gordon    schedule 15.10.2018
comment
yakin itu benar dan jika saya menjalankan tanpa pernyataan for, maka itu berjalan dengan baik.   -  person makatyu    schedule 15.10.2018
comment
Kode di atas sedikit salah, dan kembalinya fungsi scaling_shirink adalah shirink.   -  person makatyu    schedule 15.10.2018
comment
Jika salah, perbaikilah. Kami tidak dapat membantu jika Anda tidak menunjukkan kepada kami kode sebenarnya.   -  person John Gordon    schedule 15.10.2018
comment
Saya memecahkan masalah ini haha, itu hal yang sederhana! terima kasih telah menjawab John :)   -  person makatyu    schedule 15.10.2018


Jawaban (1)


EDIT:

Periksa apakah jalur gambar sudah benar dan apakah itu benar-benar gambar dengan format yang diterima oleh Opencv. Karena jika jalur Anda salah maka img = cv2.imread(addr) akan mengembalikan None dan height, width = img.shape[:2] akan menimbulkan kesalahan

Selain itu, fungsi Anda scaling_shirink() mengembalikan Tidak Ada. Untuk memperbaikinya, ubah saja ke fungsi di bawah ini:

def scaling_shirink(addr):
    img = cv2.imread(addr)
    height, width = img.shape[:2]
    shrink = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
    cv2.imshow('Shrink', shrink)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    #this return was missing
    return shrink 

Itu seharusnya berhasil!

person Guilherme Uzeda    schedule 15.10.2018
comment
Ini bukan masalah yang menyebabkan kesalahan (walaupun ini masalah lain untuk OP); img.shape melemparkan kesalahan sebelum pernyataan return terjadi karena fungsi imread() mengembalikan None. - person alkasm; 16.10.2018
comment
@AlexanderReynolds Anda benar! Meskipun kurangnya pengembalian fungsi juga merupakan masalah. Terima kasih atas tipnya - person Guilherme Uzeda; 16.10.2018