我正在用EmguCV(OpenCV包装器)编写一个C#程序,我在视频中编辑像素。这些像素需要保持与我所设置的相同的值,但他们没有。例如,我设置区域100 100到105 105这些数字。83 84 65 82 84 32 76 111 114 101 109 32 105 112 115 117 109 32 100 111 108 111 114 32 115
例如,我将区域100 100设置为105 105,这些数字: START Lorem ipsum dolor s
.
但当我读取这些像素时,输出的是这样的结果: 65 65 86 87 44 63 65 88 90 44 84 80 84 84 56 86 86 86 79 81 57 54 57 38 35 32
变成了胡言乱语
我需要在我的代码中修正什么才能使输出与输入相同。视频读和写。
video = new VideoCapture(op.FileName, VideoCapture.API.Ffmpeg);
noOfFrames= Convert.ToInt32(video.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameCount));
FPS = Convert.ToInt32(video.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.Fps));
playing = true;
currentFrame = 0;
Mat img = new Mat();
if(encode)
{
vw = new VideoWriter(Directory.GetCurrentDirectory() + "\\output.mp4", FPS, new System.Drawing.Size(width, height), true);
}
while (playing== true && currentFrame < noOfFrames-1)
{
if (noOfFrames-3 == currentFrame)
{
//i end it a bit quicker just in case (shouldnt matter)
vw.Dispose();
break;
}
video.Read(img);
//img.ConvertTo(img, Emgu.CV.CvEnum.DepthType.Cv32S);
Image<Bgra, byte> frame = new Image<Bgra, byte>(img.width, img.height);
frame = slika.ToImage<Bgra, Byte>();
if(encode)
{
//string t = "";
for (int i = 100; i < 105; i++)
{
for (int j = 100; j < 105; j++)
{
//MessageBox.Show(sporocilo[counter]+" ");
if(counter<msg.Length)
{
frame.Data[i, j, 0] = (byte)msg[counter];
frame.Data[i, j, 1] = 0;
frame.Data[i, j, 2] = 0;
counter++;
//t += (int)frame.Data[i, j, 0] + " ";
}
}
//t += "\n";
}
//MessageBox.Show(t);
Mat temp = frame.Mat;
vw.Write(frame.Mat);
}
else
{
string t="";
for (int i = 100; i < 105; i++)
{
for (int j = 100; j < 105; j++)
{
msg2 += (char)(frame.Data[i, j, 0]+18);
t += (int)frame.Data[i, j, 0]+" ";
}
t += "\n";
}
MessageBox.Show(t + " " + msg2);
}
Bitmap bmp = frame.ToBitmap();
original.Source = Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
currentFrame += 1;
await Task.Delay(FPS);
}
在VideoWriter构造函数中,我缺少一个压缩参数。
vw = new VideoWriter(path, compression, FPS, size, inColor);
但是,我已经尝试了几个压缩编解码器(主要是那些有无损的写在某处的 https:/www.fourcc.org )
ASLC
CSCD
HFYU