c# - 减去和合并图像以制作视频帧

标签 c# opencv image-processing video-processing aforge

当你想创建一个视频文件时,它的大小很重要。 我想用 JPEG 格式保存彼此不同的帧,而不是全部,以减小我的新视频文件的大小。 我使用了 Aforge.Net Framework,它很好地产生了差异结果(使用 Difference 类)。但是当我想将帧与前一帧合并以生成当前帧时,结果不是我需要的,请参见下面的示例:

这是背景框

This is Background Frame

这是当前帧

This is Current Frame

这是差异框架

This is Difference Frame

获取差值的代码:

AForge.Imaging.Filters.Difference sb = new AForge.Imaging.Filters.Difference(bmpDest);
            Bitmap result = sb.Apply(bmpSrc);
            result.Save(string.Format(address, 10002), ImageFormat.Jpeg);

如你所知,当我将差异帧与背景帧合并时,必须生成当前帧,但这是生成帧:

enter image description here

源代码是:

 AForge.Imaging.Filters.Merge mg = new AForge.Imaging.Filters.Merge(bmpSrc);
            Bitmap results = mg.Apply(new Bitmap(string.Format(address, 10002)));
            results.Save(string.Format(address, 1004), ImageFormat.Jpeg);

那么,问题就很清楚了。 这些是屏幕截图,但是当我想用这个操作来拍照时,结果也有很多问题。

我也使用 openCV 进行此操作,但在提到的获取差异的说明中,首先我应该将帧转换为灰度图像,并且我在合并图像时也遇到了问题,例如 AForge。

最后我使用了我的算法,但差异图像的大小比原始图像大!

这个操作应该怎么做? 请记住图像的大小非常重要,我想保存 JPEG 文件(用于压缩)。

最佳答案

问题是差分滤波器取的是绝对值。结果是鼠标指针被添加回图像而不是从图像中减去,因为它在差异图像中应该是负的。我不确定如何在 AForge.net 中解决这个问题。

在 opencv 中,您可以通过使用支持有符号数字的图像类型来解决此问题,例如 CV_16SC3 而不是 RGB/BGR 图像的默认 CV_8UC3。您不应使用 CV_8SC3,因为 8 位中的一位将用作符号,因此 +/-127 之外的像素值将被限制。

void imageDelta(cv::Mat& A, cv::Mat& B, cv::Mat& deltaOut)
{
    //Calculate B - A, preserving sign
    A.convertTo(A, CV_16SC3);
    B.convertTo(B, CV_16SC3);
    cv::subtract(B, A, deltaOut); //deltaOut is a CV_16SC3
}

void reconstructB(cv::Mat& A, cv::Mat& delta, cv::Mat& BOut)
{
   //Calculate B = A + delta
   cv::add(A, delta, BOut);
   BOut.convertTo(BOut, CV_8UC3); //Safe to go back to CV_8UC3 now.
}

关于c# - 减去和合并图像以制作视频帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17113108/

相关文章:

c# - C#-BlockingCollection : Can we have 2 threads Take() the same value?

java - 检测物体颜色各种光照OpenCV Java

java - 在不增加位深度的情况下将 TIF 转换为 JPG

c# - 如何使用IPAddress和IPv4Mask获取IP地址范围?

c# - TableServiceContext.CreateQuery 的替代方案

python - 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

python - Python OpenCV 3无法正确读取图像

python - 使用Python OpenCV在图像路径(中文,日文,韩文)中读取/加载带有Unicode字符的图像

html - 将 HTML 转换为图像的简单 HTML 布局引擎

c# - EventHubs Azure 上的时间序列数据