『OpenCV-Python』加载网络图片

点赞 + 关注 + 收藏 = 学会了
前面介绍过在 OpenCV 里可以通过 cv2.imread
读取本地图片,但这个方法无法读取网络图片。
读取网络图片:cv2.imdecode
在 OpenCV 里读取网络图片需要使用 cv2.imdecode
这个方法,它可以直接处理字节流(如网络传输的图像、摄像头帧)而无需先保存为文件。
语法:
buf
:必须是numpy.ndarray
类型,通常通过np.frombuffer()
将字节数据转换而来。该 NumPy 数组的dtype
(数据类型) 必须是np.uint8
。这是因为图像的编码数据本质上是一串字节流,每个字节的值范围是 0 到 255,这恰好对应了 8 位无符号整数 (uint8
) 的表示范围 。flags
:可选参数,指定解码方式(与cv2.imread
的flags
相同)。是一个整数,它像一个指令开关,告诉imdecode
函数我们希望以何种方式来解码这张图片 。这个参数决定了输出图像的颜色模式、是否保留透明通道等。
以下是几个最常用、也最重要的 flags
值:
举个例子

在这个例子中,通过 request
发起请求,模拟了浏览器请求,获取我在掘金的头像图片。
然后用 cv2.imdecode
方法加载我的头像。
最后通过 cv2.waitKey(0)
让图片一直展示,直至按下 q
键才关闭图片窗口。
为何需要 cv2.imread
和 cv2.imdecode
两个 API?
cv2.imread
和 cv2.imdecode
似乎在做同样的事情——将某种格式的数据变成 OpenCV 可以处理的图像矩阵。那么,为什么需要两个独立的函数呢?这并非冗余设计,而是体现了软件工程中一个极其重要的原则:单一职责原则(Single Responsibility Principle, SRP)。这个原则指出,一个类或一个模块应该有且只有一个引起它变化的原因。换句话说,一个函数应该只做一件事,并把它做好。
更直观地总结两者的区别,总结了一个表格:
以上就是本文的全部内容了,想了解更多 OpenCV Python
的工友欢迎关注 《OpenCV Python 中文教程》
点赞 + 关注 + 收藏 = 学会了
版权声明: 本文为 InfoQ 作者【德育处主任】的原创文章。
原文链接:【http://xie.infoq.cn/article/89be0e77ffefc133410b77572】。文章转载请联系作者。
评论