有没有办法使用VideoCapture()方法获取特定的框架?
我目前的代码是:
import numpy as np
import cv2
cap = cv2.VideoCapture('video.avi')
Run Code Online (Sandbox Code Playgroud)
这是我的参考教程.
我有一台罗技C920挂在我的电脑上,我正试图用它来点击使用OpenCV的图片.
我知道我可以使用以下方法捕获图像:
cam = cv2.VideoCapture(1)
s, im = cam.read() # captures image
cv2.imshow("Test Picture", im) # displays captured image
cv2.imwrite("test.bmp",im) # writes image test.bmp to disk
Run Code Online (Sandbox Code Playgroud)
但它让我获得了我的相机能够拍摄的15MP静态照片.我从上面得到的东西远远不如我click拍的照片.
那么,有没有办法拍照(就像它可以在官方的WebCam软件中完成)?
它的2012和cv2在这里。这篇旧文章向您展示如何在opencv的1.1 相机捕获中更改opencv版本中的相机分辨率, 但是这些功能在cv2或其随附的cv2.cv模块中不可用(opencv 2.4.1是最新的)
有谁知道如何通过python为opencv更改相机分辨率?我不是在寻找一种c ++解决方案,而是从cv2随附的python(2.7)访问的一种解决方案。导入单独的模块是可以接受的。
如其他地方所述,VideoCapture.set函数不起作用。
似乎在 Java opencv 中设置网络摄像头分辨率的标准方法不起作用。我执行以下操作:
VideoCapture v = new VideoCapture();
boolean wset = v.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, 1280);
boolean hset = v.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, 800);
System.out.println(wset);
System.out.println(hset);
v.open(1);
Run Code Online (Sandbox Code Playgroud)
哪个打印:
> false
> false
Run Code Online (Sandbox Code Playgroud)
...并且不会改变相机分辨率。它似乎停留在 640x480。我知道相机没有问题,因为我可以使用 C++ 绑定成功地将分辨率设置为 1280x800。
另外 -v.getSupportedPreviewSizes()不起作用。它返回一个错误:
HIGHGUI ERROR: V4L2: getting property #1025 is not supported
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
有大量问题和人们询问如何设置框架高度/宽度的相应答案。下面是一个小样本:
我知道 OpenCV 有时会在设置框架高度/宽度时出现问题。就我而言,我可以将宽度/高度范围设置为 640 x 512。相机的驱动程序由制造商提供(即不是 v4l2 或类似的东西)。我可以提供哪些调试信息,或者我如何帮助他们理解为什么我不能设置更高的宽度/帧。驱动程序是否有问题,OpenCV 两者都有?
import cv2
c = cv2.VideoCapture(1)
c.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 1280)
c.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 1024)
Run Code Online (Sandbox Code Playgroud)
我在 Python 中使用 Ubuntu 14.04 和 OpenCV 2.4.8。
我发现这个问题有一个公认的答案,表明我应该能够让它发挥作用。我不知道如何做这部分:
您可以做的是调查您的相机驱动程序,为 OpenCV 制作补丁并将其发送到 code.opencv.org。这样别人会喜欢你的工作,就像你喜欢别人的一样。
我在使用python读取相机的帧缓冲区时遇到问题。相机(Xenics)通过USB连接,相机随附一个dll。我使用ctypes访问此dll。我使用的代码主要受lantz的python模块(lantz_drivers_xenics)启发。
dll提供了XC_CopyFrameBuffer我用来将帧缓冲区复制到numpy数组的功能。
虽然原则上采集工作正常,但麻烦在于以中等或高速连续读取帧缓冲区。相机随附的已编译软件能够以24 fps的速度读出相机。在我的程序中,我想读取5到25 fps之间的帧缓冲区。但是,我无法达到此值,因为调用XC_CopyFrameBuffer函数所需的时间在0到〜0.5秒之间;它通常很低,但是大约每三帧大约需要0.5秒。
我的真实程序更复杂,使用线程并处理获取的图像。但是我将代码简化为一个重现问题并已附加的最小示例。它的文本和图形输出如下所示。我的问题是:
这是我正在使用的代码:
import time
import ctypes
import threading
import numpy as np
from numpy.ctypeslib import ndpointer
calibration_file = r"C:\Path\to\some\calibrationfile.xca"
dll = "C:\\Programme\\X-Control\\xcamera.dll"
lib = ctypes.WinDLL(dll) #for xcamera we need ctypes.WinDLL
exposure_time = 300 #microseconds (us)
readlock = threading.Lock()
#add types
lib.XC_OpenCamera.argtypes = [ctypes.c_uint]
lib.XC_CloseCamera.argtypes = [ctypes.c_uint]
lib.XC_IsInitialised.argtypes = [ctypes.c_uint]
lib.XC_LoadFromFile.argtypes = [ctypes.c_uint, ctypes.c_char_p]
lib.XC_LoadCalibrationPack.argtypes = [ctypes.c_uint, ctypes.c_char_p]
lib.XC_SetGainCamera.argtypes = [ctypes.c_uint, ctypes.c_double]
lib.XC_SetIntegrationTime.argtypes …Run Code Online (Sandbox Code Playgroud) 我在使用 OpenCV 和 python 访问 USB 摄像头时遇到问题。
我收到以下错误消息,我理解这意味着没有捕获帧?
error: OpenCV(3.4.1) C:\Miniconda3\conda-bld\opencv-suite_1533128839831\work\modules\highgui\src\window.cpp:356: error: (-215) size.width>0 && size.height>0 in function cv::imshow
Run Code Online (Sandbox Code Playgroud)
我的相机如下: https: //www.gophotonics.com/products/scientific-industrial-cameras/point-grey-research-inc/45-571-cm3-u3-50s5m-cs
简单代码如下。有什么想法吗?一些帮助我会感激
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud) 几个星期前,我在网上看到你可以显示一个带有相机属性的小对话框/菜单.在此菜单中,用户可以更改对比度,亮度......但我再也找不到它了.有人知道获得此对话框的代码吗?
先感谢您!
opencv ×7
python ×5
camera ×3
driver ×2
resolution ×2
capture ×1
ctypes ×1
framebuffer ×1
java ×1
python-2.7 ×1
usb-camera ×1
video ×1