前提・実現したいこと
python(pygame)を使って迷路を作っています。
現在、迷路のマップ表示、スタート・ゴールの表示、道と壁の表示、進んだ道(クリックされた場所)に印をつける機能ができました。
しかし、壁をクリックしても、道と同じように印がついてしまうという問題が発生しました。
そこで、クリックされた場所の色を判定して、その色が壁の色(黒)だったら、印をつけないというプログラムを実装しようとしましたがうまくいきませんでした。
お手数ですが、回答お願いします。
###現在のプログラム
長いプログラムなのでGithubにあげました。
demoがプログラム、imagesの中にプログラム中で使っている画像が入っています。
https://github.com/Syake-P/Syake.P-teratail.git
###理想のプログラム
理想のプログラムです。
RGB判定に必要な部分のみ抜粋しています。
python
1def game_loop(): 2 running = True 3 while running: 4 for event in pygame.event.get(): 5 if event.type == pygame.QUIT: 6 running = False 7 if event.type == MOUSEBUTTONDOWN: 8 mouse_x, mouse_y = event.pos #←マウスの座標取得 もし使うようでしたら参考にしてください 9 #RGB値を取得 10 if #RGB値が白(255,255,255)だったら: 11 print("white") 12 elif #RGB値が黒(0,0,0)だったら: 13 print("black") 14 elif #RGB値が黄色(255,255,0)だったら: 15 print("yellow")
###試したこと
https://techacademy.jp/magazine/51035
上記のサイトに載っているOpenCVによるRGB判定を参考にできないかと考え、まずはサイトに載っていたサンプルプログラムを画像の情報のみ変えて動かしてみたら、エラーが発生しました。
その時のコードです。
python
1import cv2 2 3img = cv2.imread('square.png', cv2.IMREAD_COLOR) 4window_name = 'img' 5 6def onMouse(event, x, y, flags, params): 7 if event == cv2.EVENT_LBUTTONDOWN: 8 crop_img = img[[y], [x]] 9 b_val = crop_img.T[0].flatten().mean() 10 g_val = crop_img.T[1].flatten().mean() 11 r_val = crop_img.T[2].flatten().mean() 12 print("R: {}, G: {}, B: {}".format(r_val, g_val, b_val)) 13 14cv2.imshow(window_name, img) 15cv2.setMouseCallback(window_name, onMouse) 16cv2.waitKey(0)
発生したエラーメッセージ
Traceback (most recent call last): File "c:/Users/○○/Desktop/python programs/images/demo.py", line 14, in <module> cv2.imshow(window_name, img) cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-xeqjxthj\opencv\modules\highgui\src\window.cpp:376: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
補足情報(FW/ツールのバージョンなど)
OpenCVでの判定について書きましたが、OpenCVにこだわりはありません。
python3.8.2,pygame2.0.1を使用。
PCのOSはWindows,VScodeを使用。
###最後に
僕は壁の判定を色によって行うことを思いつきましたが、ほかにもクリックされた画像によって判断する方法などがあると思います。ほかの方法で回答していただいても構いません。
どうぞ、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/05 09:15
2021/05/05 10:19
2021/05/05 10:25
2021/05/05 12:22