[ev3dev] ptyhon으로 LCD(화면)를 포착하는 프로그램 만들기

개시하다


이 글은 EV3에 ev3 dev를 설치해 SSH 연결이 가능한 상태라는 전제를 달았다.환경을 구축하지 못한 분들은 여기 기사를 참고하세요.
Linux로 Mindstorm-EV3 제어하세요!ev3 dev OS 설치와 SSH 연결

만든 물건


mindstorm-EV3의 스마트 블록 화면(LCD)을 포착하여 이미지로 저장하는 프로그램을 만든다.Python의 ev3 devAPIev3dev-lang-python를 사용합니다.
ev3 dev-lang-python의 환경 구축에 대해 참고하세요.
파이톤으로 EV3의 모터와 센서를 제어해 보세요.

절차.


screenshot.py
#!/usr/bin/env python3


import sys
from subprocess import call
# 画像データを扱うためのライブラリ
from PIL import Image

# 保存する画像名、デフォルトでは"screenshot.png"
out_name = sys.argv[1] if len(sys.argv) > 1 else "screenshot.png"

# フレームバッファーをキャプチャし、PNG イメージに変換する
call(["fbgrab", out_name]);

# スクリーンショットした画像を読み込む
image = Image.open(out_name)

# RGB形式に画像を変換
image = image.convert("RGB")

# 画像を整形
image = image.resize(tuple(i * 2 for i in image.size), Image.NEAREST)


pixel_data = image.load()

# 画像の色変換
for y in range(image.size[1]):
    for x in range(image.size[0]):
        if pixel_data[x, y] == (255, 255, 255):
            pixel_data[x, y] = (173, 181, 120)

# Save the image again
image.save(out_name);
call(["fbgrab", out_name])에서 얻은 캡처 이미지는 흑백 이미지이기 때문에 진정한 화면 색을 표현하기 위해서는 흰색 픽셀을 연두색으로 변환해야 한다.
그 처리를 실현하는 것은 프로그램의 다음 부분이다.
for y in range(image.size[1]):
    for x in range(image.size[0]):
        if pixel_data[x, y] == (255, 255, 255):
            pixel_data[x, y] = (173, 181, 120)

실행


첫 번째 인자에서 저장할 이미지 파일을 지정할 수 있습니다.
robot@ev3dev:$ python screenshot.py test.png
이런 그림을 얻었어요.

좋은 웹페이지 즐겨찾기