feat: image caprure with averaging

This commit is contained in:
2026-01-16 09:44:00 +03:00
parent ced7e294eb
commit af828a407d
2 changed files with 132 additions and 77 deletions
@@ -135,15 +135,25 @@ public class BGGR_PISP_COMP1_RAW_FrameDecoder : IFrameDecoder // BGGR_PISP_COMP1
// 1) Распаковка исходных данных в которых каждые 8 байт представляют 8 пикселей (это не значит что 1 байт представляет 1 пиксель!)
// 2) Демозаика полученого Bayer изображения в RGB (BGR)
if (planes.Count != 1)
throw new ArgumentException($"Single plane expected, got {planes.Count}");
if (planes.Count < 1)
throw new ArgumentException($"At least 1 plane expected, got {planes.Count}");
var pixelCount = width * height;
var source = planes[0];
var unpackedSum = new uint[pixelCount];
foreach (var source in planes)
{
var unpacked = new ushort[pixelCount];
PispDecompressor.DecompressPisp(source, width, height, stride, unpacked);
for (int i = 0; i < pixelCount; i++)
unpackedSum[i] += unpacked[i];
}
var unpacked = new ushort[width * height];
PispDecompressor.DecompressPisp(source, width, height, stride, unpacked);
var unpackedAvg = new ushort[pixelCount];
for (int i = 0; i < pixelCount; i++)
unpackedAvg[i] = (ushort)(unpackedSum[i] / planes.Count());
using var bayer = Mat.FromPixelData(height, width, MatType.CV_16UC1, unpacked);
using var bayer = Mat.FromPixelData(height, width, MatType.CV_16UC1, unpackedAvg);
var bgr = new Mat();
Cv2.CvtColor(bayer, bgr, ColorConversionCodes.BayerRG2BGR);