python - 使用 OpenCV 捕获的显微镜图像解码问题
问题描述
我正在尝试使用 OpenCV从 Vision Engineering 的 EVOCAM II 显微镜中捕获图像。它在其手册中说,它可以使用 USB 3.0 电缆插入计算机,然后用作普通网络摄像头。
因此,我使用这个非常简单的片段从相机中捕获图像:
import cv2
camera = cv2.VideoCapture(0)
ret, frame = camera.read()
if ret:
cv2.imwrite('./test.png', frame)
但是,当我应该获得1920px x 1080px
RGB 图片时,我得到的 640px x 480px
图像带有奇怪的伪影:
我尝试在VLC或AMCap等其他软件上测试相机,但我要么得到640px x 480px
黑色图像,要么软件甚至无法开始捕捉。
我想知道这是否是编码问题,或者可能是相机如何向计算机声明自己的问题。
我可以通过修改 OpenCV 中的一些参数来解决这个问题还是有什么不同?
非常感谢您的时间,
编辑 1:
opencv_version -v
在我的 conda 环境中输出:
General configuration for OpenCV 3.4.2 =====================================
Version control: unknown
Extra modules:
Location (extra): /opt/conda/conda-bld/opencv-suite_1533641454250/work/opencv_contrib-3.4.2/modules
Version control (extra): unknown
Platform:
Timestamp: 2018-08-07T11:32:43Z
Host: Linux 2.6.32-696.10.1.el6.x86_64 x86_64
CMake: 3.12.0
CMake generator: Unix Makefiles
CMake build tool: /usr/bin/gmake
Configuration: Release
CPU/HW features:
Baseline: SSE SSE2 SSE3
requested: SSE3
Dispatched code generation: SSE4_1 SSE4_2 FP16 AVX AVX2 AVX512_SKX
requested: SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
SSE4_1 (3 files): + SSSE3 SSE4_1
SSE4_2 (1 files): + SSSE3 SSE4_1 POPCNT SSE4_2
FP16 (1 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
AVX (5 files): + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
AVX2 (9 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2
AVX512_SKX (1 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX_512F AVX512_SKX
C/C++:
Built as dynamic libs?: YES
C++11: YES
C++ Compiler: /opt/conda/conda-bld/opencv-suite_1533641454250/_build_env/bin/x86_64-conda_cos6-linux-gnu-c++ (ver 7.2.0)
C++ flags (Release): -fvisibility-inlines-hidden -std=c++11 -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -pipe -I/home/lucas/anaconda3/envs/p35_gpu_jupyter/include -fdebug-prefix-map=${SRC_DIR}=/usr/local/src/conda/${PKG_NAME}-${PKG_VERSION} -fdebug-prefix-map=${PREFIX}=/usr/local/src/conda-prefix -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wno-narrowing -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fopenmp -O3 -DNDEBUG -DNDEBUG
C++ flags (Debug): -fvisibility-inlines-hidden -std=c++11 -fmessage-length=0 -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -pipe -I/home/lucas/anaconda3/envs/p35_gpu_jupyter/include -fdebug-prefix-map=${SRC_DIR}=/usr/local/src/conda/${PKG_NAME}-${PKG_VERSION} -fdebug-prefix-map=${PREFIX}=/usr/local/src/conda-prefix -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wno-narrowing -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fopenmp -g -DDEBUG -D_DEBUG
C Compiler: /opt/conda/conda-bld/opencv-suite_1533641454250/_build_env/bin/x86_64-conda_cos6-linux-gnu-cc
C flags (Release): -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -pipe -I/home/lucas/anaconda3/envs/p35_gpu_jupyter/include -fdebug-prefix-map=${SRC_DIR}=/usr/local/src/conda/${PKG_NAME}-${PKG_VERSION} -fdebug-prefix-map=${PREFIX}=/usr/local/src/conda-prefix -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-narrowing -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fopenmp -O3 -DNDEBUG -DNDEBUG
C flags (Debug): -march=nocona -mtune=haswell -ftree-vectorize -fPIC -fstack-protector-strong -fno-plt -O2 -pipe -I/home/lucas/anaconda3/envs/p35_gpu_jupyter/include -fdebug-prefix-map=${SRC_DIR}=/usr/local/src/conda/${PKG_NAME}-${PKG_VERSION} -fdebug-prefix-map=${PREFIX}=/usr/local/src/conda-prefix -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-narrowing -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fopenmp -g -DDEBUG -D_DEBUG
Linker flags (Release): -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,-rpath,/home/lucas/anaconda3/envs/p35_gpu_jupyter/lib -L/home/lucas/anaconda3/envs/p35_gpu_jupyter/lib
Linker flags (Debug): -Wl,-O2 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,-rpath,/home/lucas/anaconda3/envs/p35_gpu_jupyter/lib -L/home/lucas/anaconda3/envs/p35_gpu_jupyter/lib
ccache: NO
Precompiled headers: YES
Extra dependencies: dl m pthread rt
3rdparty dependencies:
OpenCV modules:
To be built: aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dpm face features2d flann freetype fuzzy hdf hfs highgui img_hash imgcodecs imgproc java java_bindings_generator line_descriptor ml objdetect optflow phase_unwrapping photo plot python2 python3 python_bindings_generator reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
Disabled: js world
Disabled by dependency: -
Unavailable: cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv matlab ovis sfm ts viz
Applications: apps
Documentation: NO
Non-free algorithms: NO
GUI:
Media I/O:
ZLib: /home/lucas/anaconda3/envs/p35_gpu_jupyter/lib/libz.so (ver 1.2.11)
JPEG: /home/lucas/anaconda3/envs/p35_gpu_jupyter/lib/libjpeg.so (ver 90)
WEBP: build (ver encoder: 0x020e)
PNG: /home/lucas/anaconda3/envs/p35_gpu_jupyter/lib/libpng.so (ver 1.6.34)
TIFF: /home/lucas/anaconda3/envs/p35_gpu_jupyter/lib/libtiff.so (ver 42 / 4.0.9)
JPEG 2000: /home/lucas/anaconda3/envs/p35_gpu_jupyter/lib/libjasper.so (ver 2.0.14)
OpenEXR: build (ver 1.7.1)
HDR: YES
SUNRASTER: YES
PXM: YES
Video I/O:
DC1394: NO
FFMPEG: YES
avcodec: YES (ver 58.18.100)
avformat: YES (ver 58.12.100)
avutil: YES (ver 56.14.100)
swscale: YES (ver 5.1.100)
avresample: YES (ver 4.0.0)
GStreamer: NO
libv4l/libv4l2: NO
v4l/v4l2: linux/videodev.h linux/videodev2.h
gPhoto2: NO
Parallel framework: OpenMP
Trace: YES (with Intel ITT)
Other third-party libraries:
Intel IPP: 2017.0.3 [2017.0.3]
at: /opt/conda/conda-bld/opencv-suite_1533641454250/work/build/3rdparty/ippicv/ippicv_lnx
Intel IPP IW: sources (2017.0.3)
at: /opt/conda/conda-bld/opencv-suite_1533641454250/work/build/3rdparty/ippicv/ippiw_lnx
Lapack: NO
Eigen: YES (ver 3.3.3)
Custom HAL: NO
Protobuf: /home/lucas/anaconda3/envs/p35_gpu_jupyter/lib/libprotobuf.so (3.5.1)
Python 2:
Interpreter: /opt/conda/conda-bld/opencv-suite_1533641454250/work/py2/bin/python (ver 2.7.15)
Libraries: /opt/conda/conda-bld/opencv-suite_1533641454250/work/py2/lib/libpython2.7m.so (ver 2.7.15)
numpy: /opt/conda/conda-bld/opencv-suite_1533641454250/work/py2/lib/python2.7/site-packages/numpy/core/include (ver 1.11.3)
packages path: /opt/conda/conda-bld/opencv-suite_1533641454250/work/py2/lib/python2.7/site-packages
Python 3:
Interpreter: /opt/conda/conda-bld/opencv-suite_1533641454250/work/py3/bin/python (ver 3.7)
Libraries: /opt/conda/conda-bld/opencv-suite_1533641454250/work/py3/lib/libpython3.7m.so (ver 3.7.0)
numpy: /opt/conda/conda-bld/opencv-suite_1533641454250/work/py3/lib/python3.7/site-packages/numpy/core/include (ver 1.11.3)
packages path: /opt/conda/conda-bld/opencv-suite_1533641454250/work/py3/lib/python3.7/site-packages
Python (for build): /opt/conda/conda-bld/opencv-suite_1533641454250/work/py2/bin/python
Java:
ant: /usr/bin/ant (ver 1.7.1)
JNI: /usr/lib/jvm/java/include /usr/lib/jvm/java/include/linux /usr/lib/jvm/java/include
Java wrappers: YES
Java tests: NO
Install to: /home/lucas/anaconda3/envs/p35_gpu_jupyter
-----------------------------------------------------------------
解决方案
TL;DR 使用的电缆是 USB 2.0,用 USB 3.0 代替它解决了 Windows 上的捕获问题。
是的,我知道这听起来很愚蠢,但我得到这个奇怪图像的原因是 USB 电缆是 2.0 而不是 3.0。由于电缆已经插入相机,我没有费心去验证它,而是将其更改为 3.0 使其立即在相机 Windows 应用程序上运行。该公司还确认 EVO Cam II 使用DirectShow 格式生成信号。
但是,当比较相机保存在 USB 驱动器上的图像和使用 USB 电缆捕获的图像时,我意识到质量并不相似。特别是在我的情况下,使用 USB 电缆捕获的图像质量不够好。因此,我不会再朝这个方向努力了。
但是,对于那些想从我离开的地方继续的人,以下是视觉工程支持给我的一些链接,用于在 Linux 上使用 OpenCV 捕获图像:
目前,他们没有直接的解决方案。
推荐阅读
- c++ - OpenCV WarpPerspective - 生成的单应性的强烈失真
- angular - Angular 8.0.1 platform.es5.js:102 Uncaught TypeError: Object(...) is not a function
- asp.net-mvc - 带有数据库数据的 DropDownList Viewbag
- javascript - MS 边缘滚动滞后
- ruby-on-rails - Rails 路线,意外结果(需要发布路线,而不是获取路线)
- c# - 单击“搜索”按钮时使用表格呈现 PartialView
- laravel - 如何在 vue-monthly-picker 中编写更改事件方法
- asp.net-core - 在 mvc 应用程序中,如何获取授权码?
- vba - 设置文本框默认值查询结果vba
- java - 如何在我自己的类中处理 null 以避免 NullPointerException