2016-08-07 4 views
0

이미지를 확대하려고합니다.python-numpy를 사용하여 이미지를 확대하십시오.

import numpy as np 
from scipy.ndimage.interpolation import zoom 
import Image 
zoom_factor = 0.05 # 5% of the original image 
img = Image.open(filename) 
image_array = misc.fromimage(img) 
zoomed_img = clipped_zoom(image_array, zoom_factor) 
misc.imsave('output.png', zoomed_img) 

잘린 확대 참조 :
Scipy rotate and zoom an image without changing its dimensions

이없는 작품을 수행하고이 오류가 발생합니다 :이 에 ValueError: could not broadcast input array from shape

어떤 도움이나 제안 주어진 이미지를 확대 할 수있는 방법이 있나요을 줌 배율 그리고 무엇이 문제입니까?

역 추적 :

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 1443, in _execute 
    result = method(*self.path_args, **self.path_kwargs) 
    File "title_apis_proxy.py", line 798, in get 
    image, msg = resize_image(image_local_file, aspect_ratio, image_url, scheme, radius, sigma) 
    File "title_apis_proxy.py", line 722, in resize_image 
    z = clipped_zoom(face, 0.5, order=0) 
    File "title_apis_proxy.py", line 745, in clipped_zoom 
    out[top:top+zh, left:left+zw] = zoom(img, zoom_factor, **kwargs) 
ValueError: could not broadcast input array from shape (963,1291,2) into shape (963,1291,3) 
+0

이미지의 기본 데이터 형식에 문제가 있다고 생각할 수 있습니다. 왜 [scipy의 기능] (http://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.imread.html#scipy.ndimage.imread)을 사용하여 이미지를 읽지 않는지 (PIL 데이터 구조에 대한 일부 가정을 처리하는 것이 더 적합 할 수 있습니다.) 그리고''clipped_zoom'''이란 무엇입니까? 확대/축소 가져 오기는 scipy 0.18.0에'''zoom'' 함수 하나만 있습니다. – sascha

+1

나는 이것으로부터 도움을 받았다. http://stackoverflow.com/questions/37119071/scipy-rotate-and-zoom-an-image-without-changing-its-dimensions 여기에는 clipped_zoom 함수가 포함되어있다. – Abhi

+1

음 ... 그렇다. 디버그하기 쉽지 않습니다. 정말로 도움이 필요하면 우리에게 모든 정보를 제공해야합니다. ''clipped_zoom''', 우리가 어떻게 알아야할까요? 또한 ... 당신은 단지 오류의 일부분을 게시하고 있습니다 (이것은 아마 당신에게 어떤 동작을 재구성합니까/numpy-operation은 깨지는 것입니다 -> 코드에서 어디에 위치합니까?) – sascha

답변

3

previous answer에서 사용중인 clipped_zoom 기능은 단일 채널 이미지 작성되었습니다.

현재 입력 배열의 너비와 높이 치수뿐만 아니라 "색상"치수에도 동일한 확대/축소 비율이 적용됩니다. 배열이 입력과 동일한 수의 채널로 초기화 되었기 때문에 이 발생하지만 zoom의 결과에는 확대/축소 비율로 인해 채널 수가 더 적기 때문에 발생합니다.

은 당신이 결과를 clipped_zoom 별도로 각 색상 채널을 통과 연결할 수 중 멀티 채널 이미지를 작동하도록하거나 scipy.ndimage.zoomzoom_factor 인수로 스칼라보다는 튜플을 통과 할 수있다.

후자의 접근 방식을 사용하여 이전 답변을 업데이트하여 흑백뿐만 아니라 다중 채널 이미지에서도 작동하도록했습니다.

+0

잘 작동하지만 훌륭합니다. serWarning : scipy 0.13.0부터 zoom()의 출력 모양이 int() 대신 round()로 계산됩니다. 이러한 입력의 경우 반환되는 배열의 크기는 변경되었습니다. "반환 된 배열이 변경되었습니다.", UserWarning)'. 이걸 무시해야합니까? – Abhi

+0

내 코드가'np.round'를 사용하여 출력의 크기를 계산하기 때문에 괜찮을 것입니다. 그건 그렇고, scipy 0.13.0 ~ 3 년 전에 나온, 그래서 당신은 업데이 트를 고려해 볼 수 있습니다. –

관련 문제