本文介绍了如何处理不同线程中的视频帧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
大家好,
背景
我正在努力应用程序需要对视频流进行一些图像处理并并排显示原始视频和处理过的视频。
Situtation
以下是从相机收到新帧时的事件处理程序。
pictureBox1
是显示原始视频的位置。
GetInputImage()
函数将从图片盒1
中窃取,以便可以在该帧上执行一些图像处理。
private void camera_NewFrame( object sender, ref 位图图片)
{
if (!isReadingPictureBox)
{
if (pictureBox1 .Image!= null )
pictureBox1.Image.Dispose();
pictureBox1.Image =(Bitmap)image.Clone();
}
}
私有 void GetInputImage( )
{
if (inputImage!= null )
inputImage .Dispose();
isReadingPictureBox = true ;
if (pictureBox1.Image!= null )
inputImage = new 位图(pictureBox1.Image);
isReadingPictureBox = false ;
}
图像处理很重,需要时间来处理单个图像。因此,预计输出视频的帧速率将远低于原始视频。
应用程序必须显示原始视频而不受图像处理的影响。所以我想在不同的线程中执行图像处理。
private void ProcessThread(some args)
{
GetInputImage();
if (inputImage!= null ){
// 对inputImage执行图像处理
// 在pictureBox2中显示结果
}
}
问题
[1] 抓取框架的方法(上),好吗?或者下面的那个更好?
private void camera_NewFrame( object sender, ref 位图图片)
{
pictureBox1 .Image = image; // 不会读取picturBox1的图像进行处理
if (!isReadingInputImage){
if (inputImage!= null )
inputImage.Dispose();
inputImage =(Bitmap)image.Clone(); // 现在不需要GetInputImage()。
}
}
[2] 如何制作 ProcessThread()
,无限期运行?此(下方)方法是否正常?
private void ProcessThread(some args)
{
do {
GetInputImage();
if (inputImage!= null ){
// 在inputImage上执行图像处理;
// 在pictureBox2中显示结果
}
} while (someCondition);
}
或者我应该在 camera_NewFrame()
func中触发每个帧的处理事件?
解决方案
这篇关于如何处理不同线程中的视频帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!