2014-02-06 2 views
1

Compare Extention Method를 호출 할 때 AForge.Imaging, i am getting Template's size should be smaller or equal to source image's size을 사용하여 2 개의 비트 맵을 비교하려고합니다.AForge 이미지 비교

public static Boolean Compare(this Bitmap image1, Bitmap image2, double comparisionLevel, float threshold) 
     { 

      return new ExhaustiveTemplateMatching(threshold) 
       .ProcessImage(image1.To24bppRgbFormat(), image2.To24bppRgbFormat())[0] 
       .Similarity >= comparisionLevel; 
     } 

     public static Bitmap To24bppRgbFormat(this Bitmap img) 
     { 
      return img.Clone(new Rectangle(0, 0, img.Width, img.Height), 
       System.Drawing.Imaging.PixelFormat.Format24bppRgb); 
     } 

내가 무엇이 누락 되었습니까?

+1

나는 그것이 오류를 일으키는 것처럼 보이는 offhand를 보지 않고있다. 확장 방법이 오류의 원인인지 확인 하시겠습니까? 확장 메소드가 잘 작동하고있을 가능성이 있지만 'ProcessImage'는 전달 된 값을 좋아하지 않습니다. 'img.Clone'의 결과를 지역 변수로 설정 한 다음 반환하고 응용 프로그램 디버깅을 시도하는 것이 좋습니다. 'To24bppRgbFormat'가 예외를 throw하지 않으면 실제로 반환하는 값을 볼 수 있으며 문제를 해결하는 데 도움이됩니다. –

답변

2

받고있는 오류 및 ExhaustiveTemplateMatching 호출에 대한 설명서를 보면 이 image1보다 큰 것 같습니다. 확장 메서드에 오류가 있다고 생각하지 않습니다.

전반적으로 문제가 image1image2 인 것으로 보입니다. 가능한 해결책은 논리를 추가하여 어떤 이미지가 더 큰지를 결정한 다음 sourceImage 매개 변수로 전달하고 다른 하나를 templateImage으로 전달하는 것입니다.

나는이 방법 image1에 키가되는 경우를 처리하는 방법을 모른다, 그러나 이미지 2가 ...하지만 넓은

면책 조항 : 나는 AForge을 사용한 적이; 나는 전반적인 C# 지식과 방법 문서를 간략하게 살펴볼 수 있습니다.

+0

도움이되었습니다. 감사합니다. 내부적으로이 모든 것을 처리한다고 생각 했었습니다. 적어도 지금은 무엇이 잘못된 것인지 알았습니다. – FPGA

+0

두 이미지의 간단한 영역 검사가 효과적 일지 모르지만 한 쪽이 더 커 보이고 다른 쪽이 여전히 문제가 있습니다. 넓은. AForge는 이러한 유형의 비교를 지원하지 않을 수도 있습니다. –

+0

예. 동일한 크기의 이미지 2 개를 비교하거나 이미지 자체를 잘 비교하는 것이 문제였습니다. – FPGA

1

템플릿 이미지 크기 (너비 및 높이)는 비교할 이미지보다 작아야합니다. 할

가장 먼저하는 일이 같은 것입니다 : 당신은 내가 찾기 ResizeImage의 구현을 많이 찾을 수 있습니다

if(templateImage.Height > uploadedImage.Height || templateImage.Width > uploadedImage.Width) 
    uploadedImage = ResizeImage(uploadedImage, uploadedImage.Height, templateImage.Width) 

이, 당신은 단지 수학에 Math.Min를 교체해야 흥미로운 (https://stackoverflow.com/a/6501997/3852812) .Max