0

我的 Pleora SDK 已获得许可,我不是在谈论水印。

有时它保存得很好,但有时图像会保存这些水平线伪影。

我正在保存这样的图像:

PvBuffer buffer;
PvResult operationalResult;
var filename = "...some filename...";
var result = stream.RetieveBuffer(ref buffer, ref operationalResult, 100);

if(result.IsOK())
{
    PvImage image = buffer.Image;
    var bitmap = new System.Drawing.Bitmap(
        width: (int)image.Width,
        height: (int)image.Height,
        format: PixelFormat.Format24bppRgb
    );

    image.CopyToBitmap(bitmap);

    bitmap.save(filename, ImageFormat.Jpeg);
}

有问题的示例图像:

在此处输入图像描述

这两条水平线就是我所说的。有时它们存在,有时不存在,有时它只有 1 行。

我可以做些什么来避免这个问题?

4

1 回答 1

1

而不是image.CopyToBitmap(bitmap);如上所述使用。当我为 PvImage 分配缓冲区时,我将 OpenCV Mat (Emgu) 附加到PvStream

Mat mat = new Mat(
    rows: height, 
    cols: width, 
    type: DepthType.Cv8U, 
    channels: 1
);

buffer.Buffer.Image.Attach(
    aRawBuffer: (byte*)mat.DataPointer, // <-- Needs to be in an `unsafe` method
    aSizeX: (uint)width,
    aSizeY: (uint)height,
    aPixelType: PvPixelType.BayerRG8
);

当我检索缓冲区时,我进行了颜色转换,因为相机捕获了 BayerRG8(平均花费大约 9 毫秒):

Mat rgb = new Mat(rows: mat.Rows, cols: mat.Cols, type: DepthType.Cv8U, channels: 3);
CvInvoke.CvtColor(matFromPvBuffer, rgb, ColorConversion.BayerRg2Rgb);

并保存:

rgb.Bitmap.Save(path, ImageFormat.Jpeg);

似乎我不再得到任何文物。

于 2019-02-25T04:09:16.000 回答