使用Python和OpenCV通过网址URL获取图片
在OpenCV中通过图片的URL地址获取图片:
# -*- coding: utf-8 -*-
import numpy as np
import urllib
import cv2
# URL到图片
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)
# bytearray将数据转换成(返回)一个新的字节数组
# asarray 复制数据,将结构化数据转换成ndarray
image = np.asarray(bytearray(resp.read()), dtype="uint8")
# cv2.imdecode()函数将数据解码成Opencv图像格式
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
# return the image
return image
# 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"
]
# 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)
以上过程用到bytearray、numpy.asarray、cv2.imdecode
Python bytearray()
bytearray是Python内的一个类,bytearray()返回一个新字节数组,可以看做是array的字节表示。bytearray()需要一个数组作为参数,这个数组里的元素是可变的,并且数组里每个元素的值范围是: 0 <= x < 256。
bytearray()使用:
# -*- coding: utf-8 -*-
a = bytearray()
b = bytearray([1,2,3,4,5])
c = bytearray('ABC','UTF-8')
d = bytearray(u'中文','UTF-8')
print type(a)
print type(b)
print c
print d
print(len(a))
print(len(b))
print(len(c))
print(len(d))
输出:
<type 'bytearray'>
<type 'bytearray'>
ABC
中文
0
5
3
6
numpy.asarray()
numpy.asarray()函数的作用是将输入数据(列表的列表,元组的元组,元组的列表等结构化数据)转换为numpy中矩阵(ndarray、多维数组对象)的形式。
# -*- coding: utf-8 -*-
import numpy as np
data1=[[1,2,3],[1,2,3],[1,2,3]]
data2=[(1,2,3),(1,2,3),(1,2,3)]
data3=[(1,2,3,1,2,3,1,2,3)]
data4=[1,2,3,1,2,3,1,2,3]
arr1=np.array(data1)
arr2=np.array(data1)
arr3=np.array(data3)
arr4=np.array(data4)
print arr1
print arr2
print arr3
print arr4
输出:
[[1 2 3]
[1 2 3]
[1 2 3]]
[[1 2 3]
[1 2 3]
[1 2 3]]
[[1 2 3 1 2 3 1 2 3]]
[1 2 3 1 2 3 1 2 3]
指定转换类型:
# -*- coding: utf-8 -*-
import numpy as np
data1=[[1,2,3],[1,2,3],[1,2,3]]
data2=[(1,2,3),(1,2,3),(1,2,3)]
data3=[(1,2,3,1,2,3,1,2,3)]
data4=[1,2,3,1,2,3,1,2,3]
arr1=np.array(data1,'f')
arr2=np.array(data1,'f')
arr3=np.array(data3,'f')
arr4=np.array(data4,'f')
print arr1
print arr2
print arr3
print arr4
'f'表示float浮点型,输出:
[[ 1. 2. 3.]
[ 1. 2. 3.]
[ 1. 2. 3.]]
[[ 1. 2. 3.]
[ 1. 2. 3.]
[ 1. 2. 3.]]
[[ 1. 2. 3. 1. 2. 3. 1. 2. 3.]]
[ 1. 2. 3. 1. 2. 3. 1. 2. 3.]
array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会,跟数据源指向同一块内存。
使用Python和OpenCV通过网址URL获取图片的更多相关文章
- iOS根据Url 获取图片尺寸
iOS根据Url 获取图片尺寸 // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:(id)imageURL { NSURL* URL = nil; if([i ...
- 根据Url 获取图片尺寸 iOS
// 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:(id)imageURL { NSURL* URL = nil; if([imageURL ...
- iOS开发——根据Url 获取图片尺寸
转自:http://www.oschina.net/code/snippet_2248391_53038 // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:( ...
- 根据URL获取图片
背景:今天因为生产环境的系统界面图片无法显示被领导叼了一波,之前用Hutool工具类解析URL获取图片的,在生产环境上跑了一个多月都正常,嘣,今天突然发现周六下午后的图片统统显示异常,之后改为用jav ...
- C# url获取图片流转字符串
//http url获取图片流转字符串 //string url = serverUrl.TrimEnd('/') + PUrl; //WebRequest request = WebRequest. ...
- 利用opencv从USB摄像头获取图片
由于opencv自带的VideoCapture函数直接从usb摄像头获取视频数据,所以用这个来作为实时的图像来源用于实体检测识别是很方便的. 1. 安装opencv 安装的步骤可以按照之前这个文章操作 ...
- Python中Opencv和PIL.Image读取图片的差异对比
近日,在进行深度学习进行推理的时候,发现不管怎么样都得不出正确的结果,再仔细和正确的代码进行对比了后发现原来是Python中不同的库读取的图片数组是有差异的. image = np.array(Ima ...
- [django]用requests从url获取图片(数据类型是bytes)后如何在template中显示出来
今天在做一个注册页面的时候遇到了一个验证码图片在页面显示的问题. 我用requests从一个url上获取到一张图片, 没有保存到本地, 而是想直接作为render的字典参数,传到页面里进行渲染.因为r ...
- 通过url获取图片尺寸的几种方法:JS和php
首先是js的方法,通过new一个Image对象,设置src属性,并监听complete和onload事件,图片加载完成后输出图片的宽度和高度 function checkPicurl(url){ va ...
随机推荐
- 剑指offer 面试37题
面试37题: 题:序列化二叉树 题目:请实现两个函数,分别用来序列化和反序列化二叉树 解题思路:首先来看二叉树的序列化,二叉树的序列化就是采用前序遍历二叉树输出节点,再碰到左子节点或者右子节点为Non ...
- 妙用php中的register_shutdown_function和fastcgi_finish_request
前言 在php中又两个方法都是在请求快结束的时候执行.方法名分别是 register_shutdown_function和fastcgi_finish_request.虽然执行的时机差不多,但是功能和 ...
- 微服务架构~BFF和网关是如何演化出来的
介绍 BFF(Backend for Frontend)和网关Gateway是微服务架构中的两个重要概念,这两个概念相对比较新,有些开发人员甚至是架构师都不甚理解. 本文用假想的公司案例+图示的方式, ...
- BlockingQueue阻塞队列
java.util.concurrent包: 1.Excutors类:通过这个类可获得多种线程池的实例 Excutors.newSingleThreadExecutor():获得单线程的Executo ...
- github使用——如何恢复被删去文件。
首先git删除文件包括以下几种情况 删除本地文件,但是未添加到暂存区: 删除本地文件,并且把删除操作添加到了暂存区: 把暂存区的操作提交到了本地git库: 把本地git库的删除记录推送到了远程服务器g ...
- MySQL实验1: 新建一个名为 library 的数据库,包含 book、reader 两张表,根据自己的理解安排表的内容并插入数据。
数据表(table)简称表,它是数据库最重要的组成部分之一.数据库只是一个框架,表才是实质内容. 实验: 新建一个名为 library的数据库,包含 book.reader两张表,根据自己的理解安排表 ...
- Introduction to vSphere Integrated Containers
vSphere Integrated Containers enables IT teams to seamlessly run traditional workloads and container ...
- maven创建web工程Spring配置文件找不到
使用maven创建web工程,将Spring配置文件applicationContext.xml放在src/resource下,用eclipse编译时提示class path resource [ap ...
- jqgrid的scroll参数的使用
scroll参数会影响addJSONData(data)方法的使用 存在scroll参数,addJSONData方法会往表格中追加数据: 不存在scroll参数时,addJSONData方法会覆盖表格 ...
- hive学习1(hive基本概念)
hive基本概念 hive简介 hive是什么 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 为什么使用hive 1)简单易上手.提 ...