Can an uploaded image be loaded directly by cv2?
11,118
Solution 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
Solution 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
.
Comments
-
erogol almost 2 years
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)