OpenCV获取IP摄像头视频
从开源中国博客搬来,合并博客
实验室做一个智能小车的小项目,期间涉及到在PC端处理小车摄像头的视频。这里先用安卓手机代替一下进行试验。大致流程就是手机摄像头获取视频,开启一个IP摄像头服务软件,在局域网内可以根据IP进行访问。Python+OpenCV2获取视频并进行显示人脸识别。
具体步骤
Step1:安装IP摄像头软件
这个在应用商店里搜一下就行了
Step2:浏览器访问测试
根据IP摄像头软件的提示从在同一个局域网中的PC的浏览器上进行访问(如:192。168.1.111:8080)
Step3:OpenCV获取视频
视频的本质是不断变化的图片,而Python是可以直接通过URL/IP获得图片的,找到图片地址,就可以进行获取了代码如下:
resp = urllib.urlopen("http://192.168.1.128:8080/shot.jpg")
frame = resp.read()
Step4:进行图片转码
上一步获得的图片OpenCV是无法直接处理的(你把它保存了再打开的话,算我没说),而这就涉及到了图片的存储格式的转换,将比特流转换成OpenCV里的图片格式,代码如下:
resp = urllib.urlopen("http://192.168.1.128:8080/shot.jpg")
frame = np.asarray(bytearray(resp.read()), dtype="uint8")
frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
Step5:人脸识别
这个就没什么说的了,将图片转码之后就和处理普通视频没什么差别了。完整代码如下:
#coding:utf-8
import cv2
import urllib2
import urllib
import numpy as np
cv2.namedWindow("test")#命名一个窗口
#cap=cv2.VideoCapture("http://192.168.1.128:8080/shot.jpg?rnd=190604?dummy=param.mjpg")#打开1号摄像头
#success, frame = cap.read()#读取一桢图像,前一个返回值是是否成功,后一个返回值是图像本身
# print success
success = True
resp = urllib.urlopen("http://192.168.1.111:8080/shot.jpg")
frame = np.asarray(bytearray(resp.read()), dtype="uint8")
frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
color = (255,0,0)#设置人脸框的颜色
classfier=cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")#定义分类器
while success:
#success, frame = cap.read()
resp = urllib.urlopen("http://192.168.1.111:8080/shot.jpg")
frame = np.asarray(bytearray(resp.read()), dtype="uint8")
frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
size=frame.shape[:2]#获得当前桢彩色图像的大小
image=np.zeros(size,dtype=np.float16)#定义一个与当前桢图像大小相同的的灰度图像矩阵
image = cv2.cvtColor(frame, cv2.cv.CV_BGR2GRAY)#将当前桢图像转换成灰度图像
cv2.equalizeHist(image, image)#灰度图像进行直方图等距化
#如下三行是设定最小图像的大小
divisor=8
h, w = size
minSize=(w/divisor, h/divisor)
faceRects = classfier.detectMultiScale(image, 1.2, 2, cv2.CASCADE_SCALE_IMAGE,minSize)#人脸检测
if len(faceRects)>0:#如果人脸数组长度大于0
for faceRect in faceRects: #对每一个人脸画矩形框
x, y, w, h = faceRect
cv2.rectangle(frame, (x, y), (x+w, y+h), color)
cv2.imshow("test", frame)#显示图像
key=cv2.waitKey(10)
c = chr(key & 255)
OpenCV获取IP摄像头视频的更多相关文章
- opencv获取IP摄像头(IP-camera)实时视频流
之前这篇文章讲了如何通过网络摄像头(web camera)获取实时视频流,但是这种方法的缺陷就是摄像头和主机必须连在一起,那这种在室外部署的时候就会非常麻烦并且不安全,所以后来找了下用海康威视或者大华 ...
- Opencv如何捕获摄像头视频-OpenCV步步精深
捕获摄像头实时图像 这一点非常非常重要,因为这一点关乎了以后我们进行各种各样的识别(人脸识别,车牌识别等等有趣的识别).opencv提供了一个接口,可以轻松的让我们实现这个功能.我们先来看一段代码,根 ...
- Kafka+OpenCV 实现实时流视频处理
1. 启动Kafka Server bin/kafka-server-start.sh config/server.properties & 2. 创建一个新topic bin/kafka- ...
- 【opencv】VideoCapture打不开本地视频文件或者网络IP摄像头
1.前提:成功打开本地USB摄像头 // 创建VideoCapture对象 VideoCapture vc = new VideoCapture(); // 可以成功打开本地USB摄像头 // 参数可 ...
- 使用OpenCV进行网络摄像头的图像采集及视频存储
rtspURL格式 rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream 1) username ...
- python之OpenCv(五)---抓取摄像头视频图像
OpenCV 可以通过 头videoCapture()方法打开摄像 摄像头变量 = cv2.VideoCapture(n) n为整数,内置摄像头为0,若有其他摄像头则依次为1,2,3,4,... ...
- 利用opencv从USB摄像头获取图片
由于opencv自带的VideoCapture函数直接从usb摄像头获取视频数据,所以用这个来作为实时的图像来源用于实体检测识别是很方便的. 1. 安装opencv 安装的步骤可以按照之前这个文章操作 ...
- Opencv保存摄像头视频&&各种编码器下视频文件占用空间对比
打开视频文件或摄像头视频需要使用Opencv中的VideoCapture类,保存视频或摄像头视频到本地磁盘,需要使用Opencv中的VideoWriter类,使用都很简单,这篇文章就记录一下Video ...
- OpenCV 连接 Android IP摄像头
0.下载IP摄像头(android软件)并安装 比如这个(图标是一个灰色的摄像头的那个软件) 1.新建cpp文件,编译 #include "opencv2/opencv.hpp" ...
随机推荐
- 关于WSDL的理解
WSDL是由types, message, portType组成. 而binding, service则是具体的绑定. portType有哪些operation. 然后是portType的Endpoi ...
- Hopewell Project Sharing项目总结分享PPT
这篇随笔记录的是2013年底,Hopewell Project已经成功验收后,开项目分享会所编写的PPT. 由于此项目是本人带领Team成员一起开发,而且关键技术是自己把控,所以公司希望能开个项目分享 ...
- windows 下为Python安装redis
最近在看<redis实战>,里面的redis示例都是Python写的,先将环境整好 启动redis redis-server.exe redis.conf 安装了python2.7 安装 ...
- 站长常用的200个js代码 站长常用js代码大全 站长常用js代码集合
站长常用的200个js代码 1.文本框焦点问题 onBlur:当失去输入焦点后产生该事件 onFocus:当输入获得焦点后,产生该文件 Onchange:当文字值改变时,产生该事件 Onselect: ...
- Array常用函数收藏
1.isArray 语法:Array.isArray(obj) 说明:判断一个对象是否是数组. 例如: Array.isArray([]); Array.isArray([1]); Array.isA ...
- oracle long类型转换成varchar2
CREATE OR REPLACE FUNCTION LONG_TO_CHAR( in_rowid rowid,in_owner varchar,in_table_name varchar,in_co ...
- javascript提取联通个人信息和通话记录的代码
由于一些巨大的困难,一些后端爬虫改成了前端爬虫. 前端爬虫是只有js语言,后端爬虫有python java nodejs php这些语言. 前端爬虫有window.document对象,在浏览器端的爬 ...
- NPOI把Excel导入到数据库
二,把Excel中的数据导入到数据库的具体步骤: protected void Button1_Click(object sender, EventArgs e) { ...
- uploadify在火狐下上传不了的解决方式,java版(Spring+SpringMVC+MyBatis)具体解决方式
因为技术选型的原因,在一个产品中.我选择了uploadify,选择它的原因是它有完好的技术文档说明(http://www.uploadify.com/documentation/),唯一不足的是 ...
- iOS开发--UIButton 设置圆角 边框颜色 点击回调方法
UIButton *signBtn = [UIButton buttonWithType:UIButtonTypeCustom]; signBtn.frame = CGRectMake(, , , ) ...