首页 > 解决方案 > 将 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="

标签: pythonjsonnumpy

解决方案


好吧,我想出了解决我的问题的方法。很简单,我从代表我的图像的 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


推荐阅读