首页 > 编程 > Python > 正文

利用Python和OpenCV库将URL转换为OpenCV格式的方法

2020-02-23 00:27:13
字体:
来源:转载
供稿:网友

2015327143841977.jpg (690×553)

今天的博客是直接来源于我自己的个人工具函数库。

过去几个月,有些PyImageSearch读者电邮问我:“如何获取URL指向的图片并将其转换成OpenCV格式(不用将其写入磁盘再读回)”。这篇文章我将展示一下怎么实现这个功能。

额外的,我们也会看到如何利用scikit-image从URL下载一幅图像。当然前行之路也会有一个常见的错误,它可能让你跌个跟头。

继续往下阅读,学习如何利用利用Python和OpenCV将URL转换为图像


方法1:OpenCV、NumPy、urllib

第一个方法:我们使用OpenCV、NumPy、urllib库从URL获取图像,并将其转换为图像。打开并新建一个文件,取名url_to_image.py,我们开始吧:

# import the necessary packagesimport numpy as npimport urllibimport cv2 # METHOD #1: OpenCV, NumPy, and urllibdef url_to_image(url):  # download the image, convert it to a NumPy array, and then read  # it into OpenCV format  resp = urllib.urlopen(url)  image = np.asarray(bytearray(resp.read()), dtype="uint8")  image = cv2.imdecode(image, cv2.IMREAD_COLOR)   # return the image  return image

首先要做的就是导入我们必需的包。我们将使用NumPy转换下载的字节序为NumPy数组,使用urllib来执行实际的网络请求,使用cv2来绑定OpenCV接口。
在第7行,我们定义了我们的url_to_image函数。这个函数带一个url参数,也就是我们想要下载的图像地址。

接下来,在第10行,我们使用urllib库来打开这个图像链接。11行则将这个下载下来的字节序转换为NumPy数组。

至此,NumPy数组还是一个1维数组(也就是一个长长的像素链表)。为了将其转换为2维格式,假设每个像素3个通道(意即分别为红,绿,蓝通道),在12行我们使用cv.imdecode函数。最后,在15行我们返回解码出来的图像给调用函数。

一切就绪,该到让它工作的时候了:

# initialize the list of image URLs to downloadurls = [  "http://www.pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",  "http://www.pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",  "http://www.pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",] # loop over the image URLsfor url in urls:  # download the image URL and display it  print "downloading %s" % (url)  image = url_to_image(url)  cv2.imshow("Image", image)  cv2.waitKey(0)

3-5行定义了我们将要下载和转换为OpenCV格式的图像地址列表。

第9行我们遍历这个列表,13行则调用url_to_image函数,然后在14行和15行将获取的图像显示到屏幕上。到此呢,我们就可以像正常情况下一样,使用OpenCV来操作和处理这些图像了。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表