Can an uploaded image be loaded directly by cv2?

可紊 提交于 2021-02-07 11:51:51

问题


I have an uploaded file in memory. I want to manipulate the file with cv2. Currently, I write the file to disk then read it with cv2. How can I skip writing the file and load it directly with cv2?

file = request.files['file']
# if file and allowed_file(file.filename):

# save file            
filename = secure_filename(file.filename)
file_path = os.path.join(dressrank.config['SHOW_IMG_FOLDER'], filename);
file.save(file_path)
img_path = file_path

# COLOR FATURE EXTRACTION
img = read_img(img_path)
img =img_resize(img, 500)

回答1:


Build a numpy array using the uploaded data. Decode this array using cv2.

img = cv2.imdecode(numpy.fromstring(request.files['file'].read(), numpy.uint8), cv2.IMREAD_UNCHANGED)

Prior to OpenCV 3.0, use cv2.CV_LOAD_IMAGE_UNCHANGED instead.


See also: Python OpenCV load image from byte string




回答2:


If working with BaseHTTPRequestHandler, one should first create a FieldStorage form:

fm = cgi.FieldStorage(fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST'})

then:

if "file" in fm:            
    image = cv2.imdecode(np.frombuffer(fm['file'].file.read(), np.uint8), cv2.IMREAD_UNCHANGED)

Also, note that fromstring is deprecated, and that's why I'm updating davidism's answer with frombuffer.



来源:https://stackoverflow.com/questions/27517688/can-an-uploaded-image-be-loaded-directly-by-cv2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!