Exceção de falta de memória do EmguCV apenas no modo de liberação x86 - nitidez de imagens
Estou tentando aumentar a nitidez de uma imagem usando o 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();
O código funciona bem para imagens de média resolução, mas ao usar imagens de alta resolução, por exemplo: 6000X4000 A seguinte exceção é lançada
Observe que a nitidez funciona bem mesmo para imagens de alta resolução quando o projeto é definido como AnyCPU -> Debug Mode Estou usando o EmguCV 3.3
Atualizar:
De acordo com a resposta de referência de Rick, fiz a seguinte modificação, mas o problema persiste.
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();