一、实现此功能所必备的手机软件:IP摄像头
二、通过局域网,用python实现将手机摄像头的画面传到电脑端并且显示:
1、去‘设置‘那里将用户名和密码清除掉
2、打开IP摄像头服务器,复制局域网并搜索:
然后你就可以用将手机摄像头彩色画面传到电脑端并且显示啦
是不是突然感觉很简单,有没有觉得很神奇,哈哈,是不是突然有了成就感,不过。。。。。。
你发现了没,咱们没用代码!!!
这只是一个幌子嘻嘻
3、那咱们下面来用代码实现啦:
import cv2
import time
if __name__ == '__main__':
cv2.namedWindow("camera",1)
#开启ip摄像头
video="http://192.168.43.1:8081/" #此处@后的ipv4 地址需要修改为自己的地址
capture =cv2.VideoCapture(video)
num = 0;
while True:
success,img = capture.read()
cv2.imshow("camera",img)
#按键处理,注意,焦点应当在摄像头窗口,不是在终端命令行窗口
key = cv2.waitKey(10)
if key == 27:
#esc键退出
print("esc break...")
break
if key == ord(' '):
#保存一张图像
num = num+1
filename = "frames_%s.jpg" % num
cv2.imwrite(filename,img)
capture.release()
cv2.destroyWindow("camera")
三、用python实现将手机摄像头画面(黑白)传到电脑端并且显示:
1、先上代码:(附有注释)
import cv2
import numpy as np
#设定蓝色的阈值
lower_blue=np.array([78,43,46])
upper_blue=np.array([110,255,255])
if __name__ == '__main__':
cv2.namedWindow("camera",1)
#开启ip摄像头
video="http://192.168.0.32:8081/" #此处@后的ipv4 地址需要修改为自己的地址
capture =cv2.VideoCapture(video)
while(1): # 得到一个框架并且显示出来
ret, frame = capture.read()
cv2.imshow('Capture', frame)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) #RGB转换为HSV型号
mask = cv2.inRange(hsv, lower_blue, upper_blue) # 根据阈值构建掩模 cv2.imshow('Mask', mask) # 检测蓝色
res = cv2.bitwise_and(frame, frame, mask=mask) # 对原图像和掩模进行位运算
cv2.imshow('Result', res)
if cv2.waitKey(1) & 0xFF == ord('q'):
breakcap.release()
cv2.destroyAllWindows()
2、相关知识:
(1)capture =cv2.VideoCapture(video)
对这个有疑惑的同学可以看一下我的上一篇博客
OpenCV视觉学习之混合高斯模型进行背景建模
(2)ret, frame = capture.read()
第一个参数ret 为True 或者False,代表有没有读取到图片
第二个参数frame表示截取到一帧的图片
(3)在阴影检测算法中经常需要将RGB格式的图像转化为HSV格式,对于阴影区域而言,它的色度和饱和度相对于原图像而言变化不大,主要是亮度信息变化较大,,将RGB格式转化为HSV格式,就可以得到H、S、V分量,从而得到色度、饱和度、亮度得值;
具体的阐述:
HSV模型 :倒圆锥模型,HSV就是按照色彩、深浅、明亮来描述的。
1)H表示色彩,亦色调
2)S表示深浅,S=0时,只有灰度,亦饱和度
3)V表示明亮,色彩的明亮程度,亦亮度,该值与光强没有直接联系。
(4)mask = cv2.inRange(hsv, lower_blue, upper_blue)
调节图像颜色信息(H)、饱和度(S)、亮度(V)区间,选择蓝色区域.
(5)res = cv2.bitwise_and(frame, frame, mask=mask)
图象的按位运算函数与cv2.bitwise_and和运算,cv2.bitewise_or或运算,cv2.bitewise_not非运算,cv2.bitewise_xor异或运算
就以和运算为例cv2.bitwise_and(frame, frame, mask=mask)。frame,和frame是图象,可以一样;mask是要选定的区域(不处理这些,而处理其他的),没有的话可以忽略。函数实际上就是对图象的二进制数据进行与或非操作。具体的应用结合了下一小节一起展示了出来。
(6)cv2.waitKey(1) & 0xFF == ord(‘q’):
cv2.waitKey(1) 1为参数,单位毫秒,表示间隔时间.
ord(’ ')将字符转化为对应的整数(ASCII码)
0xFF是十六进制常数,二进制值为11111111。通过使用位和(和)这个常数,它只留下原始的最后8位。
四、嘿嘿,都看到这里了,点个赞再走呗