Leo*_*has 8 c++ image qt4 video-processing opticalflow
我是Qt的新手,我只知道基础知识:创建接口和连接插槽.简而言之,我的知识根本不是深刻的.
我需要打开一个视频文件并捕获它的所有帧以获得R,G,B通道,然后再处理光流(这已经完成)帧到帧以最终在窗口上表示它.
有可能用Qt获取视频帧吗?我研究了很多,但没有找到任何结论.
您可以使用QMediaPlayer来实现此目的.
QMediaPlayer::setVideoOutput.QAbstractVideoSurface::present(const QVideoFrame & frame)您的实现,QAbstractVideoSurface如果视频已成功加载.然后,您可以从QVideoFrame访问频道和所有内容,并在小部件上绘制帧.我不知道为什么我不能包含必要的 Qt 标头来处理帧(它们似乎总是有未解决的依赖关系,有些不存在),所以我转向 OpenCV 3.0 并这样做:
cv::VideoCapture cap(videoFileName);
if(!cap.isOpened()) // check if we succeeded
return;
while (cap.isOpened())
{
cv::Mat frame;
cap >> frame;
cv::flip(frame, frame, -1);
cv::flip(frame, frame, 1);
// get RGB channels
w = frame.cols;
h = frame.rows;
int size = w * h * sizeof(unsigned char);
unsigned char * r = (unsigned char*) malloc(size);
unsigned char * g = (unsigned char*) malloc(size);
unsigned char * b = (unsigned char*) malloc(size);
for(int y = 0; y < h;y++)
{
for(int x = 0; x < w; x++)
{
// get pixel
cv::Vec3b color = frame.at<cv::Vec3b>(cv::Point(x,y));
r[y * w + x] = color[2];
g[y * w + x] = color[1];
b[y * w + x] = color[0];
}
}
}
cap.release();
Run Code Online (Sandbox Code Playgroud)
它非常适合我的目的,所以我没有继续研究。
不管怎么说,还是要谢谢你。
| 归档时间: |
|
| 查看次数: |
6812 次 |
| 最近记录: |