使用手机摄像头链接电脑使用OpenCV
调用IP摄像头
电脑没有摄像头,想着使用手机链接到电脑上使用OpenCV。首先下载APP,直接搜索IP 摄像头
,找到图标如下图的:
打开软件,点击右上方的设置,找到用户名
和密码
,默认分别是admin
和12345
,可以按照自己需要修改,也可以不修改,使用默认的。
然后点击下方的打开IP摄像头服务器。
然后在下一个页面中将RTSP勾上,可以看到相关链接地址:
这个时候,手机端就操作好了。
打开电脑端写一个Python脚本:
import cv2"""
这里的链接是在手机上的`rtsp://10.66.208.227:8554/live`的基础上还有用户名和密码
用户名默认为admin, 密码默认为12345, 如果有修改就填写修改后的值。
"""
vid = cv2.VideoCapture('rtsp://admin:12345@10.66.208.227:8554/live')
while True:rst, frame = vid.read()if rst:cv2.imshow('Phone', frame)if cv2.waitKey(1) & 0xFF == ord('q'):break
这样就可以看到已经弹出cv2的窗口了,里面显示的就是手机摄像头的内容。
数据积压问题
在调用摄像头时候,在进行数据操作后,由于操作需要一定的时间花费,导致了数据积压得越来越多,造成程序卡死或者数据非常缓慢。这里实现了一种方式,新建了一个线程的类,一直在获取最新一帧的数据,然后在使用过程中,一直都只使用最新的一帧数据来进行操作,这样数据就不会积压起来。
python示例代码
class CameraBufferCleanerThread(threading.Thread):def __init__(self, camera, name='camera-buffer-clear-thread'):self.camera = cameraself.last_frame = Nonesuper(CameraBufferCleanerThread, self).__init__(name=name)self.start()def run(self):while True:ret, self.last_frame = self.camera.read()camera = cv2.VideoCapture('rtsp://admin:12345@10.66.208.227:8554/live')# Start the cleaning thread
cam_cleaner = CameraBufferCleanerThread(camera)# Use the frame whenever you want
while True:if cam_cleaner.last_frame is not None:# DO SOMETHING CODEcv2.imshow('The last frame', cam_cleaner.last_frame)cv2.waitKey(10)
C++示例代码
C++版本的代码经过尝试在4.5.0版本中测试成功。需要OpenCV编译的时候支持了ffmpeg
,否则ret = cap.read(data)
的代码读取数据始终为空。
#include "stdafx.h"
#include <iostream>
#include <thread>
#include <atomic>
#include <opencv2\opencv.hpp>static std::atomic_bool isOpen; // 用于记录视频源是否打开的状态,atomic_数据类型,用于多线程的数据类型,可以不用使用mutex数据安全锁
/*
*************************************************************************************
*func: 刷新视频流的最后一帧到data
*@Param:std::string s,视频源,为IP摄像机地址,若为USB相机需要修改数据类型为int,传入0/1/2等
*@Param: bool &ret,视频流读取状态值,数据将会在主线程使用
*@Param: cv::Mat &data,视屏流的数据
*@Return: None
*@Note:
*creator:busy
*datetime:2021-07-06
*************************************************************************************
*/
void videoFresher(std::string s, bool &ret, cv::Mat &data)
{cv::VideoCapture cap(s);while (true){ret = cap.read(data);cv::waitKey(1);if (!ret){break;}}cap.release();isOpen = false;
}int main(int argc, char* argv[])
{std::string source="rtsp://admin:12345@10.66.211.9:8554/live";bool status = false;isOpen = true;cv::Mat last_frame;// 创建一个读取最新数据的线程std::thread thrd(videoFresher, source, std::ref(status), std::ref(last_frame));// 开启线程thrd.detach();while (true){// 若检查到数据流已经关闭,则结束主线程的循环if (!isOpen){break;}// 获取读取数据流的状态,读取成功时,将最后一帧的数据显示到窗口if (status){cv::imshow("video", last_frame);}cv::waitKey(1);}return 0;
}
Ref
- C++ 多线程基础及 C++11 多线程库总结
使用手机摄像头链接电脑使用OpenCV相关推荐
- Android 手机摄像头做 电脑 PC 视频摄像头 聊天
到以下连个网址,把smartcam软件下载下来: http://en.sourceforge.jp/projects/sfnet_smartcam/releases/ 手机端 http://en.so ...
- python手机摄像头投测距_python opencv单目测距 小孔成像原理
python opencv单目测距 小孔成像原理 小孔成像原理 一 用相似三角形计算物体或者目标到相机的距离 我们将使用相似三角形来计算相机到一个已知的物体或者目标的距离. 相似三角形就是这么一回事: ...
- 手机链接电脑 Visual Studio Code 经常连接不上
手机autoJs链接电脑上的 Visual Studio Code经常链接不上 明明手机上的无障碍服务开启了,电脑的ip也正确,但还是会报 · 这种错误:这个原因很可能是电脑和手机连的不是一个网,尝试 ...
- python-电脑调用手机摄像头
" 电脑没有摄像头之这不是有手机摄像头" 因为电脑低级或者像我一样本身就是使用台式电脑的兄弟,又不想买摄像头,想想就痛苦. 今天,我们就来解决这个痛苦的问题,虽然我们的电脑没有摄像 ...
- python+opencv用电脑调用手机摄像头或其他网路摄像头
python+opencv用电脑调用手机摄像头或其他网路摄像头 文章目录: 1 获取手机摄像头或网络摄像头的ip 1.1 获取手机摄像头的ip 1.2 获取网络摄像头的IP 1.3 关于RTSP协议 ...
- 基于opencv第三方视觉库,通过内网IP调用手机摄像头,实现人脸识别与图形监测
1. 安装opencv视觉库 OpenCV 是一个开源的计算机视觉库,OpenCV 库用C语言和 C++ 语言编写,可以在 Windows.Linux.Mac OS X 等系统运行.同时也在积极开发 ...
- Python+OpenCV 调用手机摄像头并实现人脸识别
文章内容: 1.windows 环境下安装 OpenCV 机器视觉环境搭建: 2.基于通过 Python+OpenCV调用手机摄像头并实现人脸检测识别. 目录 1 实验环境 2 实验准备 2.1 下载 ...
- OpenCV调用手机摄像头与人脸检测
文章目录 一.OpenCV机器视觉环境搭建 1. OpenCV下载 2. OpenCV安装 3. 安装测试 二.OpenCV调用摄像头及人脸检测 1. 调用电脑摄像头 2. 调用手机摄像头及人脸检测 ...
- 使用手机摄像头做网络ip摄像头 并用opencv获取rtsp视频流
目录 前言 准备工作 DroidCam使用方法 IP摄像头使用方法 使用opencv调用摄像头 前言 最近要做一个和图像有关的项目,需要获取热成像摄像头的输入进行处理,最终调研找到了一款网络摄像机.苦 ...
最新文章
- jieba之segment
- 这四大因素决定了中国将在2030年领先全球人工智能市场
- 智能车竞赛技术报告 | 电磁越野组 - 哈尔滨工业大学 - 紫丁香三队
- 零基础Java学习之类和对象
- python不支持_为什么 Python 不支持函数重载?而其他语言大都支持?
- ldd /usr/bin/mysql_mysql客户端登录时报mysql: relocation error错误
- 《MySchool数据库设计优化》内部测试
- 我的世界最危险的服务器生存系列,《我的世界》极具危险的服务器
- 值传递,指针传递,引用传递
- 自动驾驶系统的学习笔记
- Pytorch Dataset、Dataloader的简单理解与使用
- 用计算机和手算标准差不一致,计量师基础知识教案二第三章.ppt
- rba有哪几個主要組成部分_RBA管理体系有哪些
- python爬虫爬取合肥工业大学校园新闻
- 随时随地通过代理访问内部服务器(tfcenter)
- 智能化测试技术探索与实践——AAAS/IEEE Fellow、北京大学讲席教授谢涛阿里行
- 教职工员工管理MySQL实训_数据库课程设计---教职工管理系统
- ARM Linux Qt 5.x.x 无标题栏
- (附源码)ssm高校选课系统 毕业设计 291627
- 移动端(H5+)唤起B站(Bilibili)APP客户端的代码。
热门文章
- 90后破了60年未解数学难题 将面临无学可上的尴尬
- 张同学的 SQL中对材料报价单的数据权限进行操作 (如列转行 行转列的处理) 学习一下....
- 如何看k线图的图解法
- Linux01-VM安装CentOS7并使用静态IP联网
- 软件产品检测报告是软件企业成功退税的必要的材料之一
- 2022-2028全球手动洁牙器械行业调研及趋势分析报告
- mysql如何按季度分组统计_MySQL中按周、月、季、年分组统计
- Multi-Port Switch模块用法
- 【已解决】UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to ini
- windows11时间显示秒