forked from amkovkov/GranuSightSoftware2
feat: image caprure with averaging
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user