EmguCV Excepción de falta de memoria en modo de liberación x86 únicamente: enfoque de imágenes
Estoy tratando de aumentar la nitidez de una imagen usando 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();
El código funciona bien para imágenes de resolución media, pero cuando se usan imágenes de alta resolución, por ejemplo: 6000X4000 La siguiente excepción se produce
enga en cuenta que el enfoque funciona bien incluso para imágenes de alta resolución cuando el proyecto está configurado en AnyCPU -> Modo de depuración Estoy usando EmguCV 3.3
Actualiza:
Según la respuesta de referencia de Rick, hice la siguiente modificación, pero el problema persiste. Por favor, consejos.
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();