Python 烧瓶上传灰度图像
我在学习烧瓶。当我选择一个图像文件时,我想通过cv2转换该图像的灰度。但是Python 烧瓶上传灰度图像,python,flask,Python,Flask,我在学习烧瓶。当我选择一个图像文件时,我想通过cv2转换该图像的灰度。但是cv2.imread无法读取变量。我创建新函数还是添加一些代码行?我认为html没有什么可以改变的 app.py 从flask导入flask,呈现模板,请求,重定向,url,从目录发送 从werkzeug.utils导入安全文件名 导入操作系统 文件夹\u PATH=os.PATH.join('C:\\Users\\teran\\Desktop\\Ps\u Sd\\uploads\\')) 允许的扩展名=set(['png
cv2.imread
无法读取变量。我创建新函数还是添加一些代码行?我认为html没有什么可以改变的
app.py
从flask导入flask,呈现模板,请求,重定向,url,从目录发送
从werkzeug.utils导入安全文件名
导入操作系统
文件夹\u PATH=os.PATH.join('C:\\Users\\teran\\Desktop\\Ps\u Sd\\uploads\\'))
允许的扩展名=set(['png','png','jpg','jpeg'])
app=烧瓶(名称)
app.config['UPLOAD\u FOLDER']=文件夹路径
允许的def_文件(文件名):
在文件名和\
允许的扩展名中的filename.rsplit('.',1)[1]
@app.route('/',方法=['GET','POST'])
def upload_文件():
如果request.method==“POST”:
file=request.files['file']
如果文件和允许的文件(file.filename):
filename=secure\u文件名(file.filename)
保存(os.path.join(app.config['UPLOAD\u FOLDER'],文件名))
返回重定向(url_for('uploaded_file',filename=filename))
返回呈现模板('upload.html')
@app.route(“/show/”)
def上传文件(文件名):
filename='1http://localhost:5000/uploads/“+文件名
返回渲染模板('upload.html',filename=filename)
@app.route(“/uploads/”)
def发送文件(文件名):
从目录返回发送目录(文件夹路径,文件名)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run(debug=True)
您需要使用cv2.imdecode
功能,如中所述,然后使用c2.imencode
将其返回到可写流
因此,我将创建一个函数来创建灰度图像,如下所示:
import cv2
import numpy as np
def make_grayscale(in_stream):
# Credit: https://stackoverflow.com/a/34475270
#use numpy to construct an array from the bytes
arr = np.fromstring(in_stream, dtype='uint8')
#decode the array into an image
img = cv2.imdecode(arr, cv2.IMREAD_UNCHANGED)
# Make grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, out_stream = cv2.imencode('.PNG', gray)
return out_stream
然后,如果您想在上载时将该图像更改为灰度(将其以灰度保存在服务器上),您可以修改上载代码,使其看起来更像:
# ...
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file_data = make_grayscale(file.read())
with open(os.path.join(app.config['UPLOAD_FOLDER'], filename),
'wb') as f:
f.write(file_data)
return redirect(url_for('uploaded_file', filename=filename))
# ...
另一方面,您可能应该知道,使用最初上传的文件名命名文件可能会导致以后的问题,我已经在另一个关于此问题的答案中介绍了这一点
# ...
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file_data = make_grayscale(file.read())
with open(os.path.join(app.config['UPLOAD_FOLDER'], filename),
'wb') as f:
f.write(file_data)
return redirect(url_for('uploaded_file', filename=filename))
# ...