ルービックキューブの色を取得していきます
複数の記事になります。
ルービックキューブの色を取得して kociembaを利用して
最後は回転記号を取得します。
NO.2 画面に取得したBGRを表示
NO.3取得したいろが 何色なのか 区別する
NO.4ルービックキューブの回転記号をえる
[NO.5 最終コード 参考程度に,,,,]
(https://qiita.com/otoboke162/private/c8b5417cb8a8c5af12f8)
カメラ起動
cv2.VideoCapture(0)
( )の中身の数字を変えて 起動するカメラを指定する。
0が スタート 複数カメラ接続がある場合 1,2など試す。
if cv2.waitKey(1) & 0xFF == ord('q'):
キーボードのQボタンで ブレイク 終了します。
(ウィンドウが閉じる)
サンプルコード(カメラ)
import cv2
capture = cv2.VideoCapture(2)
while True:
ret, frame = capture.read()
cv2.imshow('camra',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
capture.release()
cv2.destroyAllWindows()
サンプルコード(カメラ)を実行
ウィンドウをクリックして 'Q'ボタンを押せば終了できます。
*右上の _ □ x ボタンは使えません
四角い枠で囲む
opencv
cv2.rectangleを使用して 四角い枠を表示する
サンプルコード(四角い枠を表示)
import cv2
capture = cv2.VideoCapture(2)
# capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) # 横幅
# capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) # 縦幅
x_s = 100
y_s = 100
x_e = 400
y_e = 400
# Y縦 X横
while True:
ret, frame = capture.read()
colorBGR = cv2.rectangle(frame,
(x_s, y_s), (x_e, y_e), (255, 255, 255), 2)
cv2.imshow('camra',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
capture.release()
cv2.destroyAllWindows()
# 追加したコード
colorBGR = cv2.rectangle(frame,
(x_s, y_s), (x_e, y_e), (255, 255, 255), 2)
*** 今回は使っていませんが 自分で ウィンドウの大きさを指定してあげることができる
# capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) # 横幅
# capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 730) # 縦幅
ret, frame = capture.read()
この frameを使う
-----------コーーーーード----------------------
# Y縦軸 X横軸
x_s = 100
y_s = 100
x_e = 400
y_e = 400
colorBGR = cv2.rectangle(frame, (x_s, y_s), (x_e, y_e), (255, 255, 255), 2)
-------------------------------------------------
------以下説明-------
”””
cv2.rectangleは四角を表示する
(frame 最初のフレームは 上の赤文字のやつ
(x_s, y_s) 開始地点を指定します
(x_e, y_e) 終了地点を指定します
(255, 255, 255) B,G,Rの順番で指定する 今回は白色
(0, 0, 255) なら 赤色
, 2) 最後の 2は 線の太さ 0にした場合 線ではなく 指定した範囲
全部塗りつぶします
0の場合 ■ このように 真っ白になる
”””
#x_s, y_s スタートの s
#x_e, y_s エンドの e
サンプルコード(四角い枠を表示)を実行
下の白い線が したのコードで表示される
colorBGR = cv2.rectangle(frame, (x_s, y_s), (x_e, y_e), (255, 255, 255), 2)
このように 範囲を指定してあげればいいじゃん。
指定したところのBGRを取得
サンプルコード(BGR取得)
import cv2
capture = cv2.VideoCapture(2)
x_s = 280
y_s = 280
x_e = 320
y_e = 320
# Y縦 X横
while True:
ret, frame = capture.read()
colorBGR = cv2.rectangle(frame, (x_s, y_s), (x_e, y_e), (255, 255, 255), 2)
pixel = frame[300, 300]
print(pixel)
cv2.imshow('camra',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
capture.release()
cv2.destroyAllWindows()
# 追加したコード
pixel = frame[300, 300]
print(pixel)
frame[Y, X]で指定すれば その座標のBGRを取得することができる
今回は fram[300,300]
四角い枠は 280~320でかこんでおり
その 中心 300の座標を取得しているので 四角い枠の中心部分の
BGRを取得している。
#### サンプルコード(BGR取得)の実行  取得したBGRを リアルタイムで ターミナルに表示しています
先の話、、、この枠を 9個用意してしまえば
ルービックキューブ色を9個取得できる。
参考サイト
カメラ起動方法
カメラの起動や台数が確認できます。
opencvの座標
x、yどっちが横軸、縦軸?? まよったらここで
ちょっと おまけ
カメラ接続確認
接続されてる カメラが不明な場合ここで確認できる (マイク・スピーカも可能)
Mac Bookで起動すると エラーがでる可能性ある。
パソコン側がカメラの使用拒否をしてるかもしれない。
カメラの使用許可をする必要がありる
パソコン側で設定はできない(はず)
abort trap6: PYthonが、、、、終了しました。
もし このエラーがでたら
こちらへどうぞ
ターミナルから VS CODEを起動するとMAC からカメラの許可を 聞いてくるはず
(自分はそうでした、ほかの方はしりません)