2011-09-18 6 views
-1

깃발이 표시된 이미지가 the one with a pie chart here입니다.캔버스에서 찾기가 바뀝니다

캔버스를 사용하여 특정 플래그를 찾아 다른 플래그로 바꾸려면 어떻게해야합니까?

편집 : 내가 소스 이미지를 제어 할 수는 없지만 찾을 수있는 지역은 항상 알려져 있으며, 교체 할 이미지가 항상 찾을 수있는 것과 같은 크기입니다. 한 특정 플래그를 다른 특정 플래그로 바꾸면됩니다.

편집 2 : 플래그가 이미지에 여러 번 나타날 수 있습니다.

+0

이것은 사소한 일이 아닙니다. 자동화 되나요? 새 플래그가 이전 플래그보다 작 으면 백그라운드 픽셀은 어디에서 오는 것입니까? –

+0

당신은 더 구체적이어야합니다. 원래 이미지를 어떻게 든 수정할 수있는 방법이 있습니까? –

+0

이미지가 존재하지 않습니다. – epascarello

답변

0

이미 좌표를 알고 매핑 할 이미지가있는 경우 drawImage을 사용하고 싶을 것입니다.

+0

이미지는 항상 다르며 깃발 만 동일합니다. 깃발을 모두 찾아서 바꿔야합니다. –

+0

국기를 찾기 위해 어떤 종류의 OCR 알 고를 찾아야 할 수도 있습니다.이 경우 픽셀 수준의 이미지를 비교해야 할 것입니다. 이 작업을 수행 할 수있는 API에는 몇 가지 메소드가 있습니다 (주로 getImageData). –

1

멋진 성능은 보이지 않지만이 방법에 접근하는 한 가지 방법은 원형 차트 이미지의 픽셀을 반복하는 것입니다.

원형 차트 이미지에 getImageData()으로 전화하여 이미지의 모든 픽셀 데이터를 얻습니다 (즉, 최대 크기 요청). 마찬가지로 검색 할 플래그에 getImageData()으로 전화하십시오. 원형 차트에서 얻은 모든 픽셀을 반복하는 루프를 설정합니다. 각 픽셀에 대해 검색중인 플래그의 왼쪽 위 (또는 반복 순서를 기반으로하는 다른 모서리)라고 가정합니다. 플래그 픽셀 데이터의 첫 번째 픽셀과 비교하고 일치하는 경우 플래그의 너비와 높이와 동일한 창 크기 내에서 반복합니다. 윈도우 반복과 각 픽셀 쌍의 끝에 도달하면 찾고있는 플래그를 발견했습니다. 일치하지 않으면 원형 차트 데이터의 다음 픽셀로 이동하고 창을 반복합니다.

최악의 경우 O([N * W * H] - [W * H]) 또는 O(N * W * H)N = pie chart pixelsW x H = flag dimensions으로 보았습니다. 플래그가없고 윈도우를 더 지능적으로 이동시킴으로써 윈도우를 반복하지 않음으로써 아마 이것을 향상시킬 수 있습니다. 일단 당신이 일치하는 것을 찾으면, drawImage()으로 전화하여 새로운 깃발을 위에 붙여 넣으려는 코너의 좌표를가집니다.

은 물론이 방법은 당신이 검색하는 플래그가 원형 차트의 이미지에 정확히을 나타내는 것으로 가정합니다. 압축되지 않은 플래그를 압축 된 원형 차트 이미지와 비교하거나 그 반대의 경우, 일치하는 항목을 찾을 수 없습니다. 마찬가지로 모든 크기 또는 방향 변화가이 접근법을 완전히 무효화합니다. 그런 종류의 유연성이 필요하다면, SIFT 영토와 같은 것을 탐구하고있는 것입니다. 캔버스 요소를 사용하여 구현할 수 있다고 확신하지만, 그렇게 할 수있는 사람이되고 싶지는 않습니다.

이 경우 반복을 수행하는 동안 DOM을 불필요하게 탐색하지 않아야합니다. 특히, 여기에 설명 된대로 픽셀 데이터에 대한 로컬 참조를 저장하려고합니다. http://www.onaluf.org/en/entry/13

관련 문제