【问题标题】:What is the difference between cv2.imread and open().read?cv2.imread 和 open().read 有什么区别?
【发布时间】:2018-12-07 09:21:13
【问题描述】:

我有这个代码:

import cv2
im = cv2.imread("0.jpg")
print(len(im.tobytes()))
fp = open("0.jpg", 'rb')
imb = fp.read()
print(len(imb))

他们是不同的!现在一个函数将“imb”格式作为输入。但我只有“我”。我必须使用 cv2.imwrite 到磁盘然后使用 fp.read() 吗? 有更快的方法吗?

我使用 mxnet 图像 imdecode。 imdecode 将“imb”作为输入。但我就是我得到的。如何将“im”传递给 mx.img.imdecode?​​p>

https://github.com/apache/incubator-mxnet/issues/13545

【问题讨论】:

  • 是的,有一种更快的方法可以使用cv2.imencode将图像转换为内存中的png压缩数据
  • cv2.imread() 了解 JPEG 标头和 DCT 系数、量化、熵编码并读入图像并将其组织成一个 BGR 像素的矩形网格。 fp.read() 只是为您提供文件中的所有字节,而不是图像。

标签: numpy opencv mxnet


【解决方案1】:

我不熟悉 mxnet 框架。但是根据你给出的代码,我猜你想要二进制格式的图像数据。

看看 OpenCV cv.imencode() API。

import cv2
im = cv2.imread("0.jpg")
img_encode = cv2.imencode('.jpg', im)[1]

我认为变量 img_encode 可能是你想要的。

或者尝试以更直观的方式使用cv2.imwrite,例如“pyfilesystem”模块中的内存文件系统。[link]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2021-06-25
    • 2017-08-31
    • 2016-07-18
    • 2010-10-09
    • 1970-01-01
    相关资源
    最近更新 更多