cv2 如何从图片文件流获取image对象

发布于 2022-09-11 16:36:13 字数 345 浏览 19 评论 0

我最近需要对图像做一些处理,当我经过一系列协议解析和解码获取到图片流的时候,下一步需要用cv2对图片进行处理,首先就需要拿到cv2的图片对象。
一般情况是
import cv2
img = cv2.imread("test.jpg")
这样就能直接拿到img对象。
可是我想在内存中直接转换,不想写入文件,再用cv2读入,这样就能少一个图片缓存的步骤。
各位大神帮下忙,我鼓捣半天了,该怎么实现呢?
比如
fc= open("test.jpg","rb").read()
这时候fc就是图片的文件流,这与我处理得到的文件流是一样的。
那么现在我该如何用cv2读入呢?
cv2.imread(fc)是肯定不对的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梨涡 2022-09-18 16:36:13

python3 cv2

>>> import cv # cv2
>>> url='http://i5.qhimg.com/t019c3e49c9c9319c33.jpg'
>>> def get_net_img(url):
    img = None
    cap=cv.VideoCapture(url)
    if cap.isOpened():
        ret,img=cap.read()
    return img

>>> img = get_net_img(url)
>>> cv.imshow('photo', img)
>>> 

方法2

# 方法2
import cv
import requests as req
import numpy as np

url2 = r'https://avatar-static.segmentfault.com/253/210/2532103026-593f867b9c17e'
rsp = req.get(url2)
cont = rsp.content
buf = np.asarray(bytearray(cont), dtype="uint8") # 转换为numpy数组
img = cv.imdecode(buf, cv.IMREAD_COLOR) # 解码成图片
cv.imshow('pic', img) # 头像
束缚m 2022-09-18 16:36:13

一楼讲的很认真,逻辑也没毛病,但是很遗憾答非所问。


fc= open("test.jpg","rb").read() 

#将fc文件字符流,转化为numpy数组
#其实就是将fc中的字符流中的每个字符转换为对应的ascii码值
#然后保存在np数组中,fc中字符的ascii码对应数组中的一个元素)
#假如fc文件字符流由100个字符构成,那么fileNPArry数组的宽度就等于100)
fileNPArray = np.fromstring(fc, np.uint8)


#cv2.IMREAD_COLOR 以彩色模式读入
#cv2.IMREAD_GRAYSCALE 以灰色模式读入
img = cv2.imdecode(fileNPArray ,cv2.IMREAD_COLOR)

#此时的img 就是你曾经通过cv2.imread()方法导入的图片对象了 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文