使用OpenCV python查看10位usb摄像头
我试图在OpenCV 4.2.0 Python 3.5.6中查看Omnivision相机的输出。相机的输出是10位原始灰度数据,我相信这是正确的16位字对齐 当我使用此OpenCV代码时:使用OpenCV python查看10位usb摄像头,python,opencv,camera,computer-vision,color-space,Python,Opencv,Camera,Computer Vision,Color Space,我试图在OpenCV 4.2.0 Python 3.5.6中查看Omnivision相机的输出。相机的输出是10位原始灰度数据,我相信这是正确的16位字对齐 当我使用此OpenCV代码时: import cv2 cam2 = cv2.VideoCapture(0) cam2.set(3, 640) # horizontal pixels cam2.set(4, 480) # vertical pixels while True: b, fr
import cv2
cam2 = cv2.VideoCapture(0)
cam2.set(3, 640) # horizontal pixels
cam2.set(4, 480) # vertical pixels
while True:
b, frame = cam2.read()
if b:
cv2.imshow("Video", frame)
k = cv2.waitKey(5)
if k & 0xFF == 27:
cam2.release()
cv2.destroyAllWindows()
break
这是我得到的图像:
大概是OpenCV使用了错误的过程将10位原始数据转换为RGB,认为它是某种YUV或其他东西
有什么方法可以让我:
- 告诉OpenCV相机的正确数据格式,以便正确进行转换
- 获取原始相机数据,以便我可以手动进行转换
import cv2
import numpy as np
cam2 = cv2.VideoCapture(0)
cam2.set(3, 640) # horizontal pixels
cam2.set(4, 480) # vertical pixels
cam2.set(cv2.CAP_PROP_CONVERT_RGB, False); # Request raw camera data
while True:
b, frame = cam2.read()
if b:
frame_16 = frame.view(dtype=np.int16) # reinterpret data as 16-bit pixels
frame_sh = np.right_shift(frame_16, 2) # Shift away the bottom 2 bits
frame_8 = frame_sh.astype(np.uint8) # Keep the top 8 bits
img = frame_8.reshape(480, 640) # Arrange them into a rectangle
cv2.imshow("Video", img)
k = cv2.waitKey(5)
if k & 0xFF == 27:
cam2.release()
cv2.destroyAllWindows()
break
视频还是照片?文档明确地说“原始”?(不是“日志”之类的东西)?因为photo RAW是一种未经校正的RGB,但得到的G是原来的两倍,而且滤光片的色度(以及每个滤光片的强度)与sRGB不同。视频通常有未修正(或线性)的空间,通常为10位,但它并不是一个真正的原始(所以YCC)。您应该尝试使用一种模式(黑色、白色和少量灰色+全饱和颜色的波段),以获得有关颜色编码的更多信息。