我正在开发一个可通过网络摄像头流进行面部识别的应用程序。我得到画布的base64编码的数据uri,并希望使用它来执行以下操作:
cv2.imshow('image',img)
数据URI看起来像这样:
data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7
因此,为清楚起见,我已经显示了图像的外观,因此base64字符串没有损坏。
<img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7">
在官方文档说,是imread
接受作为参数的文件路径。从这样的答案,如果我做类似的事情:
import base64
imgdata = base64.b64decode(imgstring) #I use imgdata as this variable itself in references below
filename = 'some_image.jpg'
with open(filename, 'wb') as f:
f.write(imgdata)
上面的代码段有效,并且图像文件已正确生成。但是,考虑到我将对流的每个帧执行此操作,因此我认为没有太多文件IO操作是可行的。我希望能够将图像读取到直接创建img
对象的内存中。
我尝试了两种似乎对某些人有用的解决方案。
pilImage = Image.open(StringIO(imgdata))
npImage = np.array(pilImage)
matImage = cv.fromarray(npImage)
我cv
没有定义,因为我安装了openCV3,可以作为cv2
模块使用。我试过了img = cv2.imdecode(npImage,0)
,这什么也没返回。
file_bytes = numpy.asarray(bytearray(imgdata), dtype=numpy.uint8)
img = cv2.imdecode(file_bytes, 0) #Here as well I get returned nothing
该文档没有真正提及imdecode
函数返回的内容。但是,从我遇到的错误中,我猜想它是以anumpy array
或ascalar
作为第一个参数。我如何在内存中获取该图像的句柄,以便以后可以执行cv2.imshow('image',img)
各种出色的操作。
我希望我能说清楚。
您可以像这样同时使用cv2和枕头:
import base64
from PIL import Image
import cv2
from StringIO import StringIO
import numpy as np
def readb64(base64_string):
sbuf = StringIO()
sbuf.write(base64.b64decode(base64_string))
pimg = Image.open(sbuf)
return cv2.cvtColor(np.array(pimg), cv2.COLOR_RGB2BGR)
cvimg = readb64('R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7')
cv2.imshow(cvimg)
谁能指导我怎么做这件事吗? 我是一个新的android所以请,如果我能有一个详细的程序,我会很感激。
本文向大家介绍php读取和保存base64编码的图片内容,包括了php读取和保存base64编码的图片内容的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了php读取和保存图片内容的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
我正在使用一个在线服务,它需要一个Base64中的映像。我已经完成了一个简单的表单,我可以上传一个图像,然后我的php将图像编码为base 64,如下所示: base64_encode(file_get_contents(_FILES图像]tmp_name); 然后,我将其传递到一个json数组中,另一个页面尝试用我的数据显示图像,但失败了(缺少图像图标),在Chrome控制台中出现错误: img
如果我重新编译,在C源代码中添加一个空白的main()方法,并删除-C标志,那么它将失败,并出现UnsatisfiedLinkError(无法在64位计算机上加载32位DLL)。 为什么Java调用一个没有main方法的DLL是无效的?这难道不会破坏DLL文件和JNI的全部意义吗? 更新
我有如下的HTML电子邮件体。 我想获取emailBody中存在的每个元素(公司、优先级、描述等),最后生成Json键值对。 我希望通过使用JSOUP库我们能够实现这一点。 预期输出如下所示: 有人能帮我解决这个问题吗?
问题内容: 在64位平台上,一个人可以为java分配的最大堆空间是多少?无限吗? 问题答案: 理论上是2 64,但是可能会有限制(显然) 根据此常见问题解答,它仅受本地系统上的内存和交换空间的限制: 在64位VM上,您具有64位可寻址性,因此可产生的最大Java堆大小仅受系统提供的物理内存和交换空间的数量限制。 另请参见为什么使用32位JVM无法获得更大的堆? 另外请记住,您需要通过命令行设置最大