[속성 오류 오류 해결] scipy에서 imresize에 대한 대체 코드

문제 설명

imresize 함수는 이미지 크기를 조정하는 데 사용할 수 있으며 구문은 다음과 같습니다.

B = imresize(A,scale) 
# 返回图像 B,它是将 A 的长宽大小缩放图像 scale 倍之后的图像。输入图像 A 可以是灰度图像、RGB 图像、二值图像或分类图像。
B = imresize(A,(numrows,numcols))
# 返回图像 B,其行数和列数由二元素(numrows,numcols) 指定。
img_resize = imresize(img, float(size) / max(img.shape))

학부 졸업 프로젝트를 완료할 때 scipy에서 imresize를 사용하여 이미지 크기를 변경했는데 그 결과 다음과 같은 오류가 보고되었습니다.

AttributeError: module 'scipy.misc' has no attribute 'imresize'

공식 scipy 문서를 찾으십시오. 원본 텍스트는 다음과 같습니다.

scipy.interpolate의 함수(spleval, spline, splmake 및 spltopp)와 scipy.misc의 함수(bytescale, fromimage, imfilter, imread, imresize, imrotate, imsave, imshow, toimage)가 제거되었습니다. 전자 세트는 v0.19.0부터 사용되지 않으며 후자는 v1.0.0부터 사용되지 않습니다. 마찬가지로 v1.0.0 이후로 사용되지 않는 scipy.misc(comb, factorial, factorial2, factorialk, logsumexp, pade, info, source, who)의 별칭이 제거됩니다. v1.1.0용 SciPy 설명서를 사용하여 재배치된 기능의 새 가져오기 위치를 추적할 수 있습니다.

설명서에는 scipy 0.19.0 및 1.0.0에서 사용된 imread, imsave 및 imresize 기능이 모두 scipy 1.3.0에서 폐기되었다고 명시되어 있습니다.

문제 해결됨

이 문제에 대해 인터넷에서 이 문제에 대한 대부분의 해결책은 pip로 PIL이나 베개를 설치하고 그렇지 않은 경우 scipy의 버전을 줄입니다. 그러나 버전 변경에는 두 가지 단점이 있습니다.

1. 여러 라이브러리를 호출할 때 다른 라이브러리의 버전이 필요한 여러 라이브러리가 종종 있습니다.예를 들어 tensorflow 라이브러리는 numpy 버전에 대한 요구 사항이 있습니다 . 후자의 라이브러리 버전을 변경하면 이전 라이브러리를 사용할 수 없게 될 수 있습니다.
2. 때때로 온라인 IDE를 사용하여 코드를 실행하지만 IDE의 구성을 변경할 수 없으면 이러한 방법이 유효하지 않습니다.

따라서 우리는 imresize 함수와 동일한 자체 코드를 작성합니다.

#imresize
#先前版本
img = scipy.misc.imresize(image,(IMAGE_H,IMAGE_W))

#新版本
from PIL import Image
img = np.array(Image.fromarray(image).resize((IMAGE_W,IMAGE_H)))

Image.fromarray: nparray에서 이미지를 생성합니다. 이 메서드에는 두 개의 매개변수가 있습니다.

  • obj(numpy.ndarray): 이미지로 변환할 배열을 나타내는 2차원 numpy 배열입니다.
  • mode (str): 출력 이미지의 모드를 나타내는 문자열입니다.

크기 조정: 지정된 높이와 너비가 됩니다. 이 메서드에는 4개의 매개변수가 있습니다.

  • InputArray src : 원본 이미지, 즉 크기를 조정할 이미지를 입력합니다.
  • OutputArray dst: 출력, 변경된 이미지. 원본 이미지와 내용은 같지만 크기는 원본 이미지와 다릅니다.
  • dsize: 출력 이미지의 크기;
  • interpolation: 보간을 지정하는 방법입니다.이미지 크기가 조정된 후 픽셀을 다시 계산해야 합니다.이 매개 변수는 픽셀을 다시 계산하는 방법을 지정하는 데 사용됩니다.

np.array: 배열 형식으로 변환합니다.

img_resize = np.array(Image.fromarray(img).resize(float(size) / max(img.shape)))

Acho que você gosta

Origin blog.csdn.net/qq_54708219/article/details/129756578
Recomendado
Clasificación