Pleora SDK 将位图保存为 jpg 时的水平线伪影
Pleora SDK Horizontal Line Artifacts when saving bitmap to jpg
我的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 行。
我可以做些什么来避免这个问题?
而不是如上所述使用 image.CopyToBitmap(bitmap);
。当我为 PvStream
分配缓冲区时,我将 OpenCV Mat (Emgu) 附加到 PvImage
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);
看来我再也没有得到神器了。
我的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 行。
我可以做些什么来避免这个问题?
而不是如上所述使用 image.CopyToBitmap(bitmap);
。当我为 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);
看来我再也没有得到神器了。