gpt4 book ai didi

c++ - 在 Opencv 中以 UYVY 编解码器录制视频

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:26 26 4
gpt4 key购买 nike

我有一台来自 e-con systems 的相机,它支持 UYVU 编解码器视频录制。当我使用他们自己的软件 (QTCam) 录制视频时,它使用 YUY2 编解码器以 avi 格式录制视频,视频可以在 VLC 中完美打开和运行。

enter image description here

现在我尝试通过 Opencv VideoWrtiter() 录制视频。我使用此命令设置 Camera 属性以读取 UYVY Codec 视频。

camera1.set(CV_CAP_PROP_FOURCC,CV_FOURCC('U','Y','V','Y'));

还使用 VideoWriter 以 AVI 文件格式录制视频。

video1.open("/home/camera1UYVY.avi",CV_FOURCC('Y','U','Y','2'),30,s1,true);

来自相机的馈送正在工作,我用 imshow() 检查过。但是录制的视频无法在 VLC 中播放,因为它适用于从 QTCam 录制的视频。

即使是重新编码的opencv记录也是一样的codec

enter image description here

我的代码在下面

#include <opencv2/core/core.hpp>
#include <opencv2/video/video.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/videoio/videoio.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char **argv) {

VideoCapture camera1;
Mat frame1;

camera1.open(0);

camera1.set(CV_CAP_PROP_FOURCC,CV_FOURCC('U','Y','V','Y'));


camera1.set(CV_CAP_PROP_FRAME_WIDTH,1280);
camera1.set(CV_CAP_PROP_FRAME_HEIGHT,720);



cout << "FPS:" << camera1.get(CV_CAP_PROP_FPS) << endl;

camera1.set(CV_CAP_PROP_FPS,30);

cout << "FPS:" << camera1.get(CV_CAP_PROP_FPS) << endl;

cout << "Camera -1 Codec: " << (int)camera1.get(CV_CAP_PROP_FOURCC) << endl;


VideoWriter video1;

cout << camera1.get(CV_CAP_PROP_FRAME_WIDTH) << endl;
cout << camera1.get(CV_CAP_PROP_FRAME_HEIGHT) << endl;
Size s1 = Size((int)camera1.get(CV_CAP_PROP_FRAME_WIDTH),(int)camera1.get(CV_CAP_PROP_FRAME_HEIGHT));


video1.open("/home/camera1UYVY.avi",CV_FOURCC('Y','U','Y','2'),30,s1,true);


while(!camera1.isOpened()){
cout << "Camera not opened" << endl;
continue;
}
while(1){

if(!video1.isOpened()){
cout << "Error opening video" << endl;
}
camera1.read(frame1);
imshow("Display1",frame1);
video1.write(frame1);
cout << frame1.data << endl;
if(waitKey(1) == 27){
break;
}
}
video1.release();
camera1.release();
return 0;

}请告诉我哪里出错了。我想从相机录制未压缩的视频并将其保存为视频文件(在 VLC 或任何其他视频播放器中打开)

最佳答案

OpenCV 似乎在将 yuv422p 格式写入 avi 时出现问题。试试这个:

video1.open("/home/camera1UYVY.avi",CV_FOURCC('I', 'Y', 'U', 'V'),30,s1,true);

这是 yuv420p 像素格式,这意味着您在垂直 U 和 V 平面上失去了一些精度,但它仍然是未压缩的视频。

关于c++ - 在 Opencv 中以 UYVY 编解码器录制视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46605325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com