用OpenCV获取显微镜图像的解码问题

2024-06-26 14:30:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用OpenCV从EVOCAM II Microscope from Vision Engineering捕获图像。它在手册中说,它可以通过usb3.0电缆插入计算机,然后用作普通的网络摄像头。在

因此,我使用这个非常简单的片段从相机捕捉图像:

import cv2
camera = cv2.VideoCapture(0)
ret, frame = camera.read()
if ret:
   cv2.imwrite('./test.png', frame)

但是,当我应该得到1920px x 1080pxRGB图片时,我得到的是640px x 480px带有奇怪伪影的图像:

640px x 480px image with weird artifacts

我试着在其他软件上测试相机,比如VLC或者AMCap,但是我要么得到了一个黑色的图像,要么这个软件甚至不能开始拍摄。在

我想知道这是编码的问题还是相机如何向计算机声明自己。在

我可以通过修改OpenCV中的一些参数来解决这个问题吗?或者它有什么不同吗?在

非常感谢您抽出时间

编辑1

在我的conda环境中opencv_version -v的输出:

^{pr2}$

Tags: from图像计算机手册cv2frameopencvcamera
0条回答
网友
1楼 · 发布于 2024-06-26 14:30:53

TL;DR使用的电缆是USB 2.0,用USB 3.0替代它解决了Windows上的捕获问题。

是的,我知道这听起来很愚蠢,但我得到这个奇怪的图像的原因是USB电缆是2.0而不是3.0。由于电缆已经插在摄像机上了,所以我没有费心去验证它,但是把它改成3.0版本后,它就可以在camera Windows应用程序上运行了。该公司还确认EVO Cam II使用DirectShow格式生成信号。在

然而,当比较相机保存在U盘上的图像和使用USB电缆拍摄的图像时,我发现质量并不相似。尤其是在我的例子中,用USB电缆拍摄的图像质量不够好。因此,我将不再朝这个方向努力。在

但是,对于那些希望继续我离开的地方的人,以下是Vision Engineering支持人员给我的一些链接,可以在Linux上使用OpenCV捕捉图像:

  1. Webcam DirectShow Properties Page in Python
  2. http://videocapture.sourceforge.net/

目前他们还没有一个直接的解决办法。在

网友
2楼 · 发布于 2024-06-26 14:30:53

不同类型的USB传输

你提到的页面并没有说这个设备可以“用USB3.0电缆插入计算机,然后作为普通的网络摄像头使用”。页面上只说它有一个USB3.0接口。你引用的页面上唯一可用的资源是小册子,它也没有说它的即插即用。在

在视觉设备和成像设备领域,usb之上的一个通用接口是"usb vision" standard。制造这种设备的厂商提供了专门的驱动程序,并且通常提供了如何与流行的库(如openCV)接口的示例代码。与即插即用相比,使用具有此标准的设备可以提高传输速率、缩短延迟时间和降低cpu利用率。通常,也提供了即插即用驱动程序,但您无法保证。如果这种即插即用驱动程序除了usb vision之外还可以使用,那么您应该改用usb vision驱动程序,因为它很可能更高级。在

事实上,小贩对这是什么司机只字不提,这让我立刻怀疑起来。我会在任何购买之前联系他们,让他们解释为什么没有提及(或者可能隐藏在他们的网页上?)在

在linux上(在评论中你说你运行的是Ubuntu18.04),这种即插即用功能是通过linux“v4l”的视频实现的。如果您想使用上面所示的设备,您需要确保供应商提供了一个适用于您的Linux版本的v4l驱动程序。在

Ubuntu版本

在撰写本文时(2018年11月19日),ubuntu18.04还没有出现足够长的时间来期待联合国通用用例的稳定性。如果此成像设备的供应商提供v4l接口驱动程序,则有合理的可能性它是不稳定的。如果可能的话,尝试使用Ubuntu16。如果你发现它可以和Ubuntu16一起工作,即使你的驱动程序应该为Ubuntu18工作,一定要通知开发者你发现了一个bug。在

相关问题 更多 >