제가 지금 pyautogui 로 이미지를 인식하고있는데
서칭하는데 대략 1 ~ 2 초 걸리더라고요
서칭시간을 줄이는법이 따로있을까요 ?
없다면
openCV는 이미지 서칭할떄 빠르게 잡히나요 ?
아니면
파이썬으로는 이미지 인식 걍 노답인가요 ?
C# 으로 만들어야할까요 ?
도와주세요 선생님
제가 지금 pyautogui 로 이미지를 인식하고있는데
서칭하는데 대략 1 ~ 2 초 걸리더라고요
서칭시간을 줄이는법이 따로있을까요 ?
없다면
openCV는 이미지 서칭할떄 빠르게 잡히나요 ?
아니면
파이썬으로는 이미지 인식 걍 노답인가요 ?
C# 으로 만들어야할까요 ?
도와주세요 선생님
광고
전체 최신 인기글
전체 주간 인기글
속도 문제라면... 네이티브 언어로 하시는게 좋아 보입니다. C언어를 이용하는게 가장 빠르고요. 그담에 C#으로 픽셀 오브젝트가 아닌 포인터를 이용해서 C언어만큼 속도를 낼 수 있습니다. lockbit로 검색해보시면 예제가 많습니다. 참고로 아래 링크에 설명이 잘 되어 있어요.
### 링크를 넣을수가 없군요^^; 구글에서 검색해보면 많은 자료가 나옵니다... ###
OpenCV도 내부적으로는 lockbit를 이용해서 포인터로 메모리 주소 참조하는걸로 알고 있는데요. 아마도... 이미지 서치한 다음에 후처리 부분에서 다시 오브젝트 방식으로 접근하는게 아닌가싶네요. 여러가지 테스트 해봤는데 일단 C가 가장 속도가 빠릅니다. 그다음에 C#이나 파이썬 같은 언어로 네이티브로 코드를 짜는게 좋고 OpenCV를 네이티브로 이용해도 비슷한 효과를 속도가 나옵니다. 아래 코드처럼
private static int[][] GetPixelArray(Bitmap bitmap)
{
var result = new int[bitmap.Height][];
var bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
for (int y = 0; y < bitmap.Height; ++y)
{
result[y] = new int[bitmap.Width];
Marshal.Copy(bitmapData.Scan0 + y * bitmapData.Stride, result[y], 0, result[y].Length);
}
bitmap.UnlockBits(bitmapData);
return result;
}
반환 값은 바이트 주소를 나타내는 포인터입니다. 편하게 코딩하려면 픽셀 2중 포문(폭, 높이)으로 처리하는게 쉽긴합니-_-;