NGMsoftware

NGMsoftware
로그인 회원가입
  • 커뮤니티
  • 질문과 답변
  • 커뮤니티

    지식인! 질문에 답변을 달면 포인트가 지급됩니다.

    질문과 답변

    지식인! 질문에 답변을 달면 포인트가 지급됩니다.

    질문에 대한 답변을 3일안에 채택하지 않으면, 자동으로 첫번째 답변자가 채택되고 포인트는 100점이 차감됩니다.

    커스텀 모듈 구현하려는 이미지 서치는 다음과 같습니다

    페이지 정보

    본문

    원본 이미지는 투명 픽셀값만 적용 시키고

    대상 이미지는 모든 필터값이 다 적용시키는 항목을 만들고 싶었습니다

     

     

                    sourceImage = NGM.Utility.ImageManager.OpenCV.TransparentPixel(sourceImage, imageModel.TransparentColors, imageModel.TransparentValue, imageModel.TransparentRange,true);
                    sourceImage = NGM.Utility.ImageManager.OpenCV.Binary(sourceImage, true, imageModel.BinaryThreshold);
                    sourceImage = NGM.Utility.ImageManager.OpenCV.BrightnessContrast(sourceImage, imageModel.Brightness, imageModel.Contrast);
                    if (player.MainHandle == IntPtr.Zero)
                        targetImage = NGM.Utility.ScreenCaptureManager.ScreenShot.GetActiveImage(Search, player);
                    else
                        targetImage = NGM.Utility.ScreenCaptureManager.ScreenShot.GetInactiveImage(player, Rectangle.Empty, Rectangle.Empty, Rectangle.Empty, false);
                        targetImage = NGM.Utility.ImageManager.OpenCV. TransparentPixel(targetImage, imageModel.TransparentColors, imageModel.TransparentValue, imageModel.TransparentRange, true);
                    rect = NGM.Utility.ImageManager.ImageCondition.IsSearch(sourceImage, targetImage, 0, true) ;
                    isSame = !rect.IsEmpty;
     

                 

    해당 이미지 찾는 코드는 이렇습니다 여기서 좀 문제가 많이 발생했는데 

    해당 이미지를 어찌저찌 찾는다 하여도 마우스 이동값과 마우스 클릭 항목등 이런걸 설정해주고 싶었는데 제실력으로는 아직 좀 무리여습니다.. ㅠㅠㅠ

     

    여기서 저 가운데 있는 Search 이 변수를 위에 속성에 다음과 같이 표기하였습니다

     

     [Category("Action")]
            [DisplayName("이미지 찾을 범위")]
            [Description("찾아라 이미지를 그리고 발견되길.")]
            [Browsable(true)]
            [ComVisible(true)]
            [TypeConverter(typeof(RectangleConverter))]
            public Rectangle Search { get; set; }

     

    범위를 이렇게 지정해줬는데 문제가 발생한것이 해당 코드로 동일한 조건에서 

    엔쥐엠 조건에 있는 이미지 서치로 했을때는 찾는데 해당 코드에서는 찾질 못하는겁니다 ㅠㅠ 

     

    어떤 코드가 중간에 어떤걸로 꼬였는지 모르겠네요 

     

    코드를 봤을때는 저기 targetImage 를 찾는곳에서 if 값이 참일때 (GetActiveImage)를 찾아 올때 esle 항목에 있는 저   targetImage = NGM.Utility.ImageManager.OpenCV. TransparentPixel(targetImage, imageModel.TransparentColors, imageModel.TransparentValue, imageModel.TransparentRange, true); 이 항목도 같이 넣어주어야 했었나 해서 if밑에 같이 넣어줬는데 오류가 뜨고 빌드가 안됬었습니다 ㅠㅠ....

     

    한 4시간정도 싸움끝에 결국 지금은 반포기 상태 입니다.... ㅠㅠ 어찌해야 저걸 제가 원하는 방식으로 할수 있을지 모르겠습니다 분명한건 엔쥐엠에서 조건에 있는 이미지로 하면 잘 찾습니다 그런데 반듯이 꼭 필요한 기능이 

     

    현 이미지 조건은 그대로 다 있는 상태에서 원본이미지만 투명픽셀값을 적용하여 대상 이미지는 모든 필터 값을 적용시킨후 그 대상과 비교하는 그런 항목을 구현해보려 했던겁니다 ㅠㅠ 저좀 살려주세요 도대체 어디가 문제인지 모르겠습니다.... ㅠㅠ

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

      채택답변
    profile_image

    엔지엠소프트웨어님의 댓글의 댓글

    엔지엠소프트웨어 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일 Date

    이미지 모델에 각각의 필터가 있는데요. 각각의 필터를 모두 적용시키는 함수예요.
    만약, 원하는 것만 하고 싶으면~
    직접 원하는 것만 하도록 구현해야 해요^^;
    정확하게 원하시는게 어떤건지 아직도 잘 이해가 안갑니다.

    정리해보면...
    1. 원본 이미지(엔지엠이 아닌...)는 포토샵으로 투명만 적용
    2. 캡쳐된 대상 이미지는 엔지엠의 필터만 적용
    3. 원본과 대상을 비교

    맞나요? 그렇다면 다 정상인데 이미지 문제일수도 있네요.
    이미지의 품질과 픽셀의 깊이 및 좌표 정보값이 외부 프로그램(포토샵)에서 어떻게 처리되는지를 알아보시고,
    엔지엠도 메모리 영역으로 내려가셔서 하나씩 포토샵에서 알아낸 정보로 조정해주셔야 해요^^;
    아니면 반대로 마이크로 소프트 이미지 처리 프로세싱을 포토샵 이미지 저장 프로세스에서 역으로 메모리 변조해서 동일하게 처리해줘야 해요.
    이렇게 해야 하는 이유는 이미지 압축 엔진이 서로 다르기도 하고, 내부적으로는 자신들의 헤더 정보를 사용하기 때문입니다.

    profile_image

    엔지엠소프트웨어님의 댓글

    엔지엠소프트웨어 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일 Date

    우선, 첫번째는 다음 패치에 GenerateImage라는 함수를 하나 추가해 드릴 예정입니다. (모든 필터 적용)
    이외에 다른 문제들은 이미지가 정상적으로 캡쳐가 되었는지 확인하는 코드를 넣어야 합니다.
    image.Save(저장할 위치);

    이걸 통해서 진짜 이미지가 잘 캡쳐가 되었고 위치도 정상인지... 찾을 이미지가 포함된 영역인지 체크해보세요.

    profile_image

    롤로노이님의 댓글의 댓글

    no_profile 롤로노이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일 Date

    GenerateImage 혹시 이 함수의 필터가 예를들어 속성값들을 키고 끌수 있는 그런 함수인지 궁금합니다(지금있는 원본만 대상만 이런식으로 원본[투명적용 true] 원본 [대비적용true]
      대상[투명적용 true] 대상 [대비적용true]이런식으로 하나씩 설정할수 있게 된다는건가용?.... ㅠㅠ 사실 저때문에 이렇게 하시는듯 한데 항상 죄송합니다. ㅠㅠ

    세부적으로 디테일 하게 가고싶어서 커스텀을 하였으나 잘 안되서 제 자신이 원망스럽지만 하지만 항상 신경써주셔서 감사합니다

    profile_image

    엔지엠소프트웨어님의 댓글

    엔지엠소프트웨어 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일 Date

    참고로... 한번 해보고 안되면 질문을 올리시는게 좋아요.
    몇시간씩 붙잡고 있는것보다는 효율적일듯합니다.

    profile_image

    롤로노이님의 댓글의 댓글

    no_profile 롤로노이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일 Date

    //불러온 이미지는 투명픽셀 적용(반전)
                    sourceImage = NGM.Utility.ImageManager.OpenCV.TransparentPixel(imageModel.Image, imageModel.TransparentColors, imageModel.TransparentValue, imageModel.TransparentRange,true);
                   
                    //찾아야될 영역 안에 있는 이미지는 투명픽셀적용 명도 및 대비적용 이진화 적용
                    if (player.MainHandle == IntPtr.Zero)
                        targetImage = NGM.Utility.ScreenCaptureManager.ScreenShot.GetActiveImage(Search, player);
                    else
                        targetImage = NGM.Utility.ScreenCaptureManager.ScreenShot.GetInactiveImage(player, Rectangle.Empty, Rectangle.Empty, Rectangle.Empty, false);
                   
                        targetImage = NGM.Utility.ImageManager.OpenCV. TransparentPixel(targetImage, imageModel.TransparentColors, imageModel.TransparentValue, imageModel.TransparentRange, true);
                        targetImage = NGM.Utility.ImageManager.OpenCV.Binary(targetImage, false, imageModel.BinaryThreshold);
                        targetImage = NGM.Utility.ImageManager.OpenCV.BrightnessContrast(targetImage, imageModel.Brightness, imageModel.Contrast);
                   
                    //비교하기 공차 10
                    rect = NGM.Utility.ImageManager.ImageCondition.IsSearch(sourceImage, targetImage, 10, false) ;
                    isSame = !rect.IsEmpty;

    타겟 이미지는 투명 픽셀 명도 대비 이진화 까지 적용하는걸 구현해서 해당 이미지를 서로 비교해서 나온값이 같은 경우를 구하는 함수를 만들어 보고 싶었는데
    첫질문에 올린내용이 타겟 이미지랑 불러온 이미지가 반대였네요 근데 저렇게 했는데도 이미지를 찾지 못하는데 혹시 제가 어떤 걸 잘못 구현했는지 알고 싶습니다

    첫번째로 이미지 서치 범위는 정상적으로 넣은듯 보이는데 코드 구현상 아무문제없이 좌표 할당을 받았고 그걸 기준으로
    [Category("Action")]
            [DisplayName("이미지 찾을 범위")]
            [Description("찾아라 이미지를 그리고 발견되길.")]
            [Browsable(true)]
            public Rectangle Search { get; set; }
    이런 속성값을 넣었습니다
    영역은정상적으로 잡아주는지 image.Save 이걸 이용해서 하라고 하셨는데 사실 잘 사용을 못하겠습니다 ㅠㅠ

    해당 기능을 구현하는데 코드상 이상없어보이는데 찾지 못하는이유가 도대체 무엇일까요

    저 투명 픽셀을 적용 안시킨 상태로 만약 원본 비교를 하면 잘 찾아 집니다 근데 커스텀으로 와서 저렇게 구현하면 안됩니다 ㅠㅠ 로직 해설 이 맞는지 질문드립니다

    제가 생각한 로직은 다음과 같습니다

    ngm에 있는 이미지를 불러온다 해당 이미지를 투명픽셀을 제외한 이미지를  sourceImage  이걸로 선언한다
    타겟이미지를 불러온다 타겟이미지는 이진화 투명 픽셀 밝기 및 대비값이 적용된 이미지를 불러온다 이미지는 targetImage 이걸로 선언한다
    sourceImage  와 targetImage  를 비교하여 공차 10을 주어 비교한다

    이게 맞는지 궁금합니다 ㅠㅠ