python 画像のアップロードとグレー変換
はじめに
POSTメソッドで画像ファイルをグレーに変換するプログラムを書いてみた。
準備
クライアントで画像をbese64に変換してJSONで転送する。
サーバは画像データを取り出して、一時保存してからグレーに変換してbese64でそのまま返すようにした。
- imageClient.py
import requests, base64 fileName = '85898497.jpg' headers = {"content-type": "application/json"} f = open(fileName, 'rb') b64 = base64.b64encode(f.read()) payload = {'image': b64.decode()} r = requests.post('http://Server IP Address/image/', json = payload, headers = headers) imageByte = base64.b64decode(r.text) w = open('clinetImage.jpg', 'wb') w.write(imageByte)
- imageServer.py
from flask import Flask, request, json import base64 import cv2 app = Flask(__name__) @app.route('/image/', methods=['POST']) def trans(): data = request.data.decode('utf-8') data = json.loads(data) imageByte = base64.b64decode(data['image']) w = open('imageFile.jpg', 'wb') w.write(imageByte) imgBgr = cv2.imread('imageFile.jpg') imgGray = cv2.cvtColor(imgBgr, cv2.COLOR_BGR2GRAY) cv2.imwrite('imageFileGray.jpg', imgGray) r = open('imageFileGray.jpg', 'rb') return base64.b64encode(r.read()) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=80)
実行
プログラムの実行結果
■変換前画像
■変換後画像
cv2.imreadが変換したバイト配列をそのまま読んでくれればスタイリッシュになりそう。
「cv2.COLOR_BGR2GRAY」を変更すればもっといろいろ変換できそう。
まとめ
画像は拾いもので他意は無いです。