opencv 没办法控制焦距怎么办?来试一下 pyuvc 吧

大部分时候,我们都是通过 opencv 来读取 usb 摄像头的帧图像的。几乎所有的 usb 摄像头是可以进行自动对焦的,除非它是定焦的。当我们想要通过代码来控制摄像头的焦距的时候,会发现,有很多时候 opencv 的 API 没有办法进行有效的控制。

比较基础的 opencv 控制焦距的代码如下:

import cv2def do_nothing(x)passcap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_AUTOFOCUS, 0)
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
cv2.createTrackbar('focus', 'img', 0, 127, do_nothing) while True:focus_val = cv2.getTrackbarPos('focus', 'img')cap.set(cv2.CAP_PROP_FOCUS, focus_val)_, img = cap.read()cv2.imshow('img', img)key = cv2.waitKey(1)if key = 27:breakcv2.destoryAllWindow()
cap.release()

上面的代码正常来说,可以通过进度条的数值来对摄像头的焦距进行控制,但是实际上,在我的摄像头上并不行。不管怎么拖动进度条,焦距都是没有任何变化,而且设置的自动对焦为 False 也不起作用,相机还是会进行自动对焦。

但是因为我使用 window 相机的高级设置测试过,确实是可以手动调整焦距的,所以我觉得这波 opencv 应该负全责。

但是 opencv 用不了,问题还是没解决,我想着相机厂家应该会有相应的 SDK 来进行控制,于是满心欢喜的发了一条微信过去,可是消息却石沉大海,了无音讯。

最后在网上找到了一个 uvc 的 python 封装解决了我的问题。

项目地址:pyuvc

通过几句简单的代码,就实现了 opencv 实现不了的对焦控制功能(具体的安装步骤官方 github 仓库里面有,这里就不展开了)

import cv2
import uvcdef do_nothing(x)passdev = uvc.device_list()[0]
cap = uvc.Capture(dev['uid'])
cap.controls[2].value = 0 # close auto focuscv2.namedWindow('img', cv2.WINDOW_NORMAL)
cv2.createTrackbar('focus', 'img', 0, 127, do_nothing) while True:focus_val = cv2.getTrackbarPos('focus', 'img')cap.controls[3].value = focus_valimg = cap.get_frame_robust().bgrcv2.imshow('img', img)key = cv2.waitKey(1)if key = 27:breakcv2.destoryAllWindow()
cap.close()

上面这段代码就可以轻松通过 uvc 实现焦距的控制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot中使用注解的方式创建队列和交换机

SpringBoot中使用注解的方式创建队列和交换机 前言 最开始蘑菇博客在进行初始化配置的时候,需要手动的创建交换机,创建队列,然后绑定交换机,这个步骤是非常繁琐的,而且一不小心的话,还可能就出了错误&…

嵌入式设备视频编码比较:H.264、H.265、MPEG-2和MJPG

在嵌入式设备领域,视频编码是一项关键技术,它能够将高清视频压缩为更小的数据量,以实现高效的存储和传输。本文将对四种常见的视频编码标准进行详细比较,包括H.264(AVC)、H.265(HEVC&#xff09…

phpinfo中的重要信息

phpinfo中的重要信息 1.PHP/操作系统版本信息2.Configuration File(ini配置文件位置)3.Registered PHP Streams(支持的流)4.Registered Stream Filters(支持的流过滤器)5.allow_url_fopen&allow_url_include6.disable_functions7.display_errors8.include_path9.open_based…

前端图片转成base64

1、 fetch api请求,重点都是 responseType 要设置为blob,再使用 FileReader 的 readAsDataURL 方法把 blob 转成 base64 getBase64 (imgUrl, callback) {fetch(imgUrl, {responseType: blob}).then(response > {return response.blob();}).then(blob …

【OpenCV实现图像:使用OpenCV进行物体轮廓排序】

文章目录 概要读取图像获取轮廓轮廓排序小结 概要 在图像处理中,经常需要进行与物体轮廓相关的操作,比如计算目标轮廓的周长、面积等。为了获取目标轮廓的信息,通常使用OpenCV的findContours函数。然而,一旦获得轮廓信息后&#…

Java8新特性 ----- Lambda表达式和方法引用/构造器引用详解

前言 在讲一下内容之前,我们需要引入函数式接口的概念 什么是函数式接口呢? 函数式接口:有且仅有一个抽象方法的接口 java中函数式编程的体现就是Lambda表达式,你可以认为函数式接口就是适用于Lambda表达式的接口. 也可以加上注解来在编译层次上限制函数式接口 Fun…

视频云存储EasyCVR平台国标接入获取通道设备未回复是什么原因?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

vue 获取元素的大小信息

在模板中为元素添加一个ref属性&#xff1a; <template> <div ref"myElement">Hello, World!</div> </template> 然后&#xff0c;在组件的setup函数中使用ref获取元素&#xff0c;并获取元素的信息&#xff1a; vue2获取方式&#xf…

【mysql】1153 - Got a packet bigger than ‘max_allowed_packet‘ bytes

执行mysql 语句出现&#xff1a;1153 - Got a packet bigger than max_allowed_packet bytes&#xff1b; 1153-得到一个大于“max_allowed_packet”字节的数据包。 数据包太大了怎么办。该配置吧。 查看max_allowed_packet show global variables like max_allowed_packet;…

Java SPI机制

目录 什么是spi API与SPI区别 SPI实现案例 SPI应用场景 1. JDBC场景 2. ShardingSphere场景 3. Spring 场景 4. SLF4J 日志门面 场景 Java.util.spi下提供了SPI机制&#xff0c;SPI机制&#xff08;Service Provider Interface)其实源自服务提供者框架&#xff08;Serv…

IT变更管理实现服务台高效协同

在当今数字化时代&#xff0c;IT变更管理是IT管理员在服务台中必须面对的重要挑战之一。随着技术的不断发展和市场的快速变化&#xff0c;管理员需要定期进行IT系统和流程的变更&#xff0c;在确保业务稳定性的同时还需提高效率和准确率。 1、全方位的变更计划 IT中应该有一个全…

[开源]Web端的P2P文件传输工具,简单安全高效的P2P文件传输服务

一、开源项目简介 小鹿快传 - 在线P2P文件传输工具 小鹿快传是一款Web端的P2P文件传输工具&#xff0c;使用了WebRTC技术实现P2P连接和文件传输。 二、开源协议 使用MIT开源协议 三、界面展示 产品截图 四、功能概述 简单安全高效的P2P文件传输服务 小鹿快传是一款Web端…

虚拟摇杆OnJoystickMove未被调用,角色不移动

更改interaction type 为 event notification

12、人工智能、机器学习、深度学习的关系

很多年前听一个机器学习的公开课,在Q&A环节,一个同学问了老师一个问题“机器学习和深度学习是什么关系”? 老师先没回答,而是反问了在场的同学,结果问了2-3个,没有人可以回答的很到位,我当时也是初学一脸懵,会场准备的小礼品也没有拿到。 后来老师解释“机器学习和…

git 把仓库的子模块也拉取下来

要拉取仓库的子模块&#xff0c;可以使用以下命令&#xff1a; git clone --recursive <repository_url>这个命令会将仓库以及所有子模块都克隆下来。 如果已经克隆了主仓库但没有克隆子模块&#xff0c;可以使用以下命令去初始化子模块&#xff1a; git submodule up…

回转窑无线测温系统解决方案

方案概述&#xff08;以回转窑监测为例&#xff09; 回转窑通常使用在热电厂、钢铁厂、冶金厂及干燥设备行业。而这些行业一般具有高温、潮湿、粉尘、高压、不便布线或现场无法提供电源等环境特点。同时&#xff0c;回转窑在工作中&#xff0c;具有旋转、高温等特点。为此&…

[CLickhouse] 学习小计

1.建表 正常按照如下语句进行建表&#xff0c;但会报错说缺少ORDER BY 或 PRIMARY KEY CREATE TABLE omds.a (x String COMMENT ,y String COMMENT ,z String ) ENGINE MergeTree(); 若我们仅需建一个没有主键的表&#xff0c;直接使用如下建表语句即可&#xff1a; CREATE…

使用netty实现WebSocket协议通信

服务器与浏览器之间实现通信&#xff0c;一般都是由浏览器发起http请求&#xff0c;服务端对http请求进行响应&#xff0c;要实现服务端主动向浏览器推送数据&#xff0c;一般采用的方案都是websocket主动推送&#xff0c;或者前端实现轮询方式拉取数据&#xff0c;轮询方式多少…

技术or管理?浅谈测试人员的未来职业发展

我们在工作了一段时间之后&#xff0c;势必会感觉到自己已经积累了一些工作经验了&#xff0c;会开始考虑下一阶段的职业生涯会如何发展。测试人员在职业生涯中的不确定因素还是不少的&#xff0c;由于其入门门槛不高&#xff0c;不用学习太多技术性知识即可入行&#xff0c;所…

RubbleDB: CPU-Efficient Replication with NVMe-oF

RubbleDB: CPU-Efficient Replication with NVMe-oF 前言 这是ATC2023的文章&#xff0c;作者来自哥伦比亚大学这篇工作在LSM-tree多副本存储的场景下&#xff0c;利用NVMe-oF技术避免了LSM-tree副本上的重复合并&#xff0c;减少了CPU开销。 Introduction 为了提供高可用性…