Convert URL to image with Python and OpenCV(根据URL下载图片)

http://www.pyimagesearch.com/2015/03/02/convert-url-to-image-with-python-and-opencv/

And as a bonus we’ll also see how we can utilize scikit-image to download an image from a URL, along with a common “gotcha” that could trip you up along the way.

OpenCV and Python versions: In order to run this example, you’ll need Python 2.7 and OpenCV 2.4.X.

Method #1: OpenCV, NumPy, and urllib

The first method we’ll explore is converting a URL to an image using the OpenCV, NumPy, and the urllib libraries. Open up a new file, name it url_to_image.py , and let’s get started:

# import the necessary packages
import numpy as np
import urllib
import cv2
 
# METHOD #1: OpenCV, NumPy, and urllib
def 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

The first thing we’ll do is import our necessary packages. We’ll use NumPy for converting the byte-sequence from the download to a NumPy array, urllib  to perform the actual request, and cv2  for our OpenCV bindings.

We then define our url_to_image  function on Line 7. This function requires a single argument, url , which is the URL of the image we want to download.

Next, we utilize the urllib  library to open a connection to the supplied URL on Line 10. The raw byte-sequence from the request is then converted to a NumPy array on Line 11.

At this point the NumPy array is a 1-dimensional array (i.e. a long list of pixels). To reshape the array into a 2D format, assuming 3 components per pixel (i.e. the Red, Green, and Blue components, respectively), we make a call to cv2.imdecode  on Line 12. Finally, we return the decoded image to the calling function on Line 15.

# initialize the list of image URLs to download
urls = [
	"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 URLs
for 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)

Lines 18-21 define a list of image URLs that we are going to download and convert to OpenCV format.

We start looping over each of these URLs on Line 25, make a call to oururl_to_image  function on Line 28, and then finally display our downloaded image to our screen on Lines 29 and 30. At this point our image can be manipulated with any other OpenCV functions as we normally would.

To see our work in action, open up a terminal and execute the following command:

Method #2: scikit-image

The second method assumes that you have the scikit-image library installed on your system. Let’s take a look at how we can leverage scikit-image to download an image from a URL and convert it to OpenCV format:

# METHOD #2: scikit-image
from skimage import io
 
# loop over the image URLs
for url in urls:
	# download the image using scikit-image
	print "downloading %s" % (url)
	image = io.imread(url)
	cv2.imshow("Incorrect", image)
	cv2.imshow("Correct", cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
	cv2.waitKey(0)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏岑志军的专栏

TTTAttributedLabel高亮显示手机号码、网址

20330
来自专栏菩提树下的杨过

Flash/Flex学习笔记(52):使用TweenLite

TweenLite是第三方出品的专用于各种缓动动画的类库,其性能据说已经超过了Adobe官方的Tween. 从网上找到了一篇中文的说明文档:http://fil...

20950
来自专栏hotqin888的专栏

MeritMS+jQuery.Gantt价值管理系统增加项目进度展示

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

32310
来自专栏叁金大数据

WPF播放器

最近由于工作需要,需要做一个播放软件,在网上参考了很多例子,园子里有很多代码。其中最多的就是wpf自带的MediaElement控件,或者VLC视频播放器。

37920
来自专栏我爱编程

利用cairo画Fractal Tree

23530
来自专栏一“技”之长

iOS NSTimer 定时器用法总结 原

NSTimer在IOS开发中会经常用到,尤其是小型游戏,然而对于初学者时常会注意不到其中的内存释放问题,将其基本用法总结如下:

7410
来自专栏帘卷西风的专栏

关于cocos2dx之lua使用TableView

在手机游戏的开发中,滚动是一项非常重要的操作,而cocos2dx中使用的最广泛的就属于TableView了,不过由于cocos2dx的接口比较晦涩,所以需要一...

19220
来自专栏Java成神之路

Java微信公众平台开发_04_自定义菜单

自定义菜单中请求包的数据是Json字符串格式的,请参见:  Java_数据交换_fastJSON_01_用法入门

15730
来自专栏五毛程序员

五毛的cocos2d-x学习笔记08-动画

19950
来自专栏杂烩

分布式服务框架之Dubbo整合Spring项目(二)

11420

扫码关注云+社区

领取腾讯云代金券