可以通过cv2直接加载上传的图像吗?

时间:2014-12-17 03:06:34

标签: python opencv flask

我在内存中有一个上传的文件。我想用cv2操纵文件。目前,我将文件写入磁盘,然后使用cv2读取它。如何跳过编写文件并直接用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)

2 个答案:

答案 0 :(得分:17)

使用上传的数据构建一个numpy数组。使用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.


另请参阅:Python OpenCV load image from byte string

答案 1 :(得分:2)

如果使用BaseHTTPRequestHandler,则应首先创建一个ndata = ['state', 'active', 'deaths', 'recovered'] ndata.forEach((el, k) => { let td$k = document.createElement('td'); td$k.innerText = filtered[i][el]; tr.appendChild(td$k); });表单:

FieldStorage

然后:

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

另外,请注意,if "file" in fm: image = cv2.imdecode(np.frombuffer(fm['file'].file.read(), np.uint8), cv2.IMREAD_UNCHANGED) 已过时,这就是为什么我要用fromstring更新大卫的答案。