【发布时间】:2018-05-17 10:18:35
【问题描述】:
我正在尝试使用 EmguCV 提高图像的清晰度
Image<Bgr, Byte> myImage = new Image<Bgr, Byte>(new Bitmap(pictureBox1.Image));
float[,] matrixKernel = new float[3, 3] {
{ 0,-1, 0 },
{-1, 5,-1 },
{ 0,-1, 0 }
};
ConvolutionKernelF matrix = new ConvolutionKernelF(matrixKernel);
Image<Bgr, float> result = myImage.Convolution(matrix);
Image<Bgr, Byte> BGRResult = result.ConvertScale<byte>(1, 0);
e.Result = BGRResult.ToBitmap();
myImage.Dispose();
result.Dispose();
BGRResult.Dispose();
该代码适用于中等分辨率图像,但是当使用高分辨率图像时,例如:6000X4000 会引发以下异常
请注意,当项目设置为 AnyCPU -> 调试模式时,即使对于高分辨率图像,锐化也能正常工作 我正在使用 EmguCV 3.3
更新:
根据 Rick 的参考答案,我做了以下修改,但问题仍然存在。请指教。
float[,] matrixKernel = new float[3, 3] {
{ 0,-1, 0 },
{-1, 5,-1 },
{ 0,-1, 0 }
};
ConvolutionKernelF matrix = new ConvolutionKernelF(matrixKernel);
var result2 = myImage.CopyBlank();
var handle = GCHandle.Alloc(result2);
Image<Bgr, float> result = result2.Convolution(matrix);
Image<Bgr, Byte> BGRResult = result.ConvertScale<byte>(1, 0);
bm_dest = new Bitmap(BGRResult.ToBitmap());
handle.Free();
BGRResult.Dispose();
result.Dispose();
myImage.Dispose();
matrix.Dispose();
【问题讨论】:
-
你可能想看看this answer
-
@RickM。感谢您的回复。如何调整该答案以在我的代码中处理掉句柄,请指教。
-
@RickM。请查看我的更新。
标签: c# .net opencv bitmap emgucv