python - 将 json 字符串图像转换为 numpy 二维数组
问题描述
我在使用 json 时遇到问题。我正在尝试将使用 json 接收的图像转换为 2D numpy 数组。我已经尝试了一些东西,但没有任何效果。
这是我获取图像的方式:
@app.route("/<path:fullurl>", methods=['GET', 'POST'])
def main(fullurl):
height, width = [int(e) for e in fullurl.split('/')]
jsonResponse = json.loads(request.data.decode('utf-8'))
我也尝试打印 jsonResponse['image'] 这就是我得到的:
"data:image/octet-stream;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAYAAAB91L6VAAAF9klEQVR4nO3dv4qU
VxjH8d8l5Ea8jb2CdBbZxlbsvITUAdPkKmxjIQGrpLAIhA1EJaCQTSIiS1jXP7tJMUrmPe5ugjrPM5
z5fOB0y/K81Zdz3jMzCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ7zTJ2YbXaZI3SQ6LngkAttpZ
kr+b17tIn2z4WQFga2xDgC+KMgBM69usjoe7gyvEAFDgMKvw/9
/4CzEAbNBJLj8WF2IA2LCLQizCAFDgvBADAEXsggGgwbgTBgAK/JRlgL
/uHQcAdodjaABo4DIWADQQYABoIMAA0ECAAaCBAANAAwEGgAY+hgQADdYD/KJ5FgDYGesB
/rJ5FgDYCd/H+18AKPciAgwA5dyABoBiT+IGNACUs/sFgGJjfJ
/0jgMA8xuPnu1+AaCA+AJAMUfPAFDM0TMANBBfACjm6BkAij2K3S8AlLoZ8QWAcmN87
/SOAwDze5llfF/2jgMA87sTR88AUG6M783ecQBgfmN8H
/WOAwDzO4ijZwAodT3iCwDlxvje7h0HAOZ3nGV8j3vHAYD53Y6jZwAoN8b3eu84ADC
/Mb4HveMAwHY6yOr97Lv1V5LnSZ5dsv7I6pj5qySfr/2vozh6BoD
/9FveD+anXHfPWd8k+azi4QBgW206wBet35N8UfB8ALCV9pL8nORkbR1ndQR92Xqa5M3b9TEhvrH5R
wSAOY1RfZ3k16zC/t056+na3+5XDgoAs/jQS1f7sfsFgA9yP248A0Cpa3k
/vtdaJwKAHTDG937vOAAwv/Hm81HvOAAwv6vx3hcAyokvABR7mGV8H
/aOAwC7we4XAIqN8b3aOw4AzO8sy
/i+6h0HAOY3xtfRMwBs2Bjfs95xAGB+ryO+AFDqXsQXAErtxTtfACg3xnevdxwAmN
/4Iwv3escBgPm9yjK+J73jAMD8xvie9o4DAPN7HN9yBQClrkR8AaDcUXzWFwBK3cpy93urdxwA2A3r3/N81DwLAOyEwyx3v1d6xwGA+f2SZXx/7B0HAOY3xvfP3nEAYH5jfB/0jgMA8xt/XlB8AWDD9iO+AFBuP//G94feUQBgt9x4uwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAPgHU+BofAK5zHIAAAAASUVORK5CYII="
解决方案
好吧,我想出了解决我的问题的方法。很简单,我从代表我的图像的 json 对象接收到的字符串是用 base64 编码的,这是真的。由于当时我对json对象或base64一无所知,所以我没有意识到字符串的开头有一个标题。所以,我的解决方案如下:
jsonResponse = json.loads(request.data.decode('utf-8'))
image = jsonResponse['image']
png_recovered = base64.decodestring(image.split(',')[1])
f = open("temp.png","w")
f.write(png_recovered)
f.close()
tab = cv2.bitwise_not(cv2.imread("temp.png",0))
我只是使用逗号来分割字符串:在它之前是标题,在它之后是图像。然后我把它写在一个 png 文件中并用 cv2 打开它以获得正确的 numpy 数组。
bitwise_not函数仅适用于我的特定应用程序,不是必需的。
我希望这对将来的某人有帮助!=D
推荐阅读
- nestjs - NestJs - 没有让 Injectable 在订阅者上工作
- flutter - 整数不能为空
- node.js - AWS Lambda 函数在不打印整个结果的情况下执行
- amazon-web-services - 如何通过 Cron 在 AWS 上的安全组上临时打开一个端口来更新证书?
- java - 带有部分分隔符的 ListView 上的 Android 错误?
- c# - 将 WCF Windows 命名管道与 Docker 容器一起使用
- java - Kotlin 到 JavaFX,在 kotlin 中使用 java getter?
- jquery - 猫头鹰轮播在我的产品滑块中未显示分页编号
- swift - 保存到 UserDefaults 被调用 19 次
- git - Git致命:模棱两可的参数“提交哈希”:未知的修订版或路径不在工作树中