通过opencv 接收UVC YUV的原始数据@TOC
通过opencv 接收UVC YUV422的原始数据
因项目需要通过UVC传输Mono16格式的数据,但是查了一下win系统上opencv没有合适的数据传输,故借鉴YUV422传输。过程中使用opencv设置" CAP_PROP_CONVERT2RGB=0",目的是希望opencv不要把数据给我转为RGB,代码如下:
```cpp
cv::Mat rawFrame;
qDebug()<<"1"<<cap.set(cv::CAP_PROP_FRAME_WIDTH, 640);
qDebug()<<"2"<<cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480);
qDebug()<<"3"<<cap.set(cv::CAP_PROP_CONVERT_RGB,0);
qDebug()<<"4"<<cap.set(cv::CAP_PROP_FOURCC, VideoWriter::fourcc('Y','U','Y','V')); // 设置编码类型,此处为YUY2
qDebug()<<"5"<<cap.set(cv::CAP_PROP_FORMAT,0);
但是比较遗憾唯有效果,猜测是c++版本和opencv版本不匹配,但是有懒得改,所以尝试了用python实现:
cap = cv2.VideoCapture(0) # 0 is the default device id
#set image width height fps\
#默认转换为RGB,关掉
print(cap.set(cv2.CAP_PROP_CONVERT_RGB, 0))
print(cap.set(cv2.CAP_PROP_FRAME_WIDTH,640))
print(cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480))
#设置格式为YUYV
# print(cap.set(cv2.CAP_PROP_MODE, cv2.CAP_MODE_YUYV))
print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(cap.get(cv2.CAP_PROP_FPS))
ret, frame = cap.read()
mat_numpy = np.array(frame)
a = mat_numpy[:, 0::2]
b = mat_numpy[:, 1::2]
mat16_1D = a+b*256
mat16_2D1 = mat16_1D.reshape(480,640)
终,搞定