저는 현재 ImageGrab에서 모든 검은 색 픽셀을 찾아야하는 PianoTiles AI를 만들고 있습니다. 나는 Image Grab의 모든 위치를 얻었지만 거기에 검은 색 픽셀이 있는지, 그렇다면 그들이 어디에 있는지 알아 내야 AI가 클릭 할 수 있습니다. Bellow 내 코드를 잘라 냈습니다.
나는 이미 웹을 둘러 봤지만 아무것도 찾을 수 없습니다. 나는 코드가 이와 같은 것이라고 생각합니다.
from PIL import ImageGrab, ImageOps
class Coordinates:
lines = [
(520, 300, 525, 760),
(630, 300, 635, 760),
(740, 300, 745, 760),
(850, 300, 855, 760)]
restartcheck = (660, 590, 725, 645)
restartbtn = (695, 615)
blackpixelpositions = []
def findtiles():
for line in Coordinates.lines:
i = ImageGrab.grab(line)
for pixel in i.getdata():
#if pixel is black
# x, y = pixel position
blackpixelpositions.append((x,y))
필요한 것은 위의 코드를 사용하여 검은 색 픽셀 위치를 제공하는 것뿐입니다.
특히 최신 4-5k 화면을 캡처하는 경우 큰 이미지의 경우 매우 느리기getpixel()
때문에 이미지를 반복하고 각 픽셀에 액세스하는 것과 같은 기능을 사용하지 않도록해야합니다 .
일반적으로 PIL 이미지를 Numpy 배열로 변환 한 다음 벡터화 된 Numpy 루틴을 사용하여 이미지를 처리하는 것이 좋습니다. 따라서 구체적으로 화면을 잡거나 파일을 열어 PIL 이미지를 얻는다고 가정 해 보겠습니다.
im = Image.open('someFile.png')
그런 다음 다음과 같이 이미지에서 Numpy 배열을 만들 수 있습니다.
n = np.array(im)
다음과 같은 검은 색 픽셀을 검색합니다.
blacks = np.where((n[:, :, 0:3] == [0,0,0]).all(2)))
그러면 x
좌표 배열과 y
검은 색 픽셀 좌표 배열이 제공됩니다 . 예를 들면 다음과 같습니다.
xcoords, ycoords = np.where((n[:, :, 0:3] == [0,0,0]).all(2))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다