2012-06-28 3 views
5

로컬 디렉토리에 이미지를 저장 한 다음 해당 디렉토리에서 이미지를 읽는 프로그램이 있습니다.Python : Urllib2 및 OpenCV

하지만 이미지를 저장하고 싶지 않습니다. 나는 그것을 URL에서 직접 읽고 싶다. 내가 그것을로 변경하는 경우

import cv2.cv as cv 
import urllib2 

url = "http://cache2.allpostersimages.com/p/LRG/18/1847/M5G8D00Z/posters/curious-cat.jpg" 
filename = "my_test_image" + url[-4:] 
print filename 
opener = urllib2.build_opener() 

page = opener.open(url) 
img= page.read() 

abc = open(filename, "wb") 
abc.write(img) 
abc.close() 

img = cv.LoadImage(filename) 

cv.ShowImage("Optical Flow", img) 
cv.WaitKey(30) 

:

argument 1 must be string without null bytes, not str

내가 무엇을 할 수

img = cv.LoadImage(img) 

이 날이 오류를 줄 것이다

여기 내 코드입니까?

답변

4

으로 파일 이름 기대 here LoadImage를 언급했다.

import cv2.cv as cv 
import urllib2 
from cStringIO import StringIO 
import PIL.Image as pil 
url="some_url" 

img_file = urllib2.urlopen(url) 
im = StringIO(img_file.read()) 
source = pil.open(im).convert("RGB") 
bitmap = cv.CreateImageHeader(source.size, cv.IPL_DEPTH_8U, 3) 
cv.SetData(bitmap, source.tostring()) 
cv.CvtColor(bitmap, bitmap, cv.CV_RGB2BGR) 

나는이 방법으로 이미지 파일을 저장할 필요가 없다고 생각합니다.

+0

감사합니다. 매우 유용합니다! 한 점 : "CStringIO에서 ..."오류가 있습니다. "from cStringIO ..."(소문자 'c') 여야합니다. –

+0

내 잘못입니다. 그 점을 지적 해 주셔서 감사합니다. 나는 그것을 바꿨다. – Froyo

-1

으로는 첫 번째 인수가 아닌 데이터

당신은 PIL을 사용할 수 원하는 경우