質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Python

    8007questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    6415questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • OpenCV

    1081questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

  • Raspberry Pi

    807questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

OpenCVで特定の色を認識したらLEDを点灯させたい

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 1,263

osashimi

score 18

USBカメラからの映像に特定の色が映ったら合図を出す、という物を作ろうとしています。そして、映像にマスクを掛けて二値化する所までは出来ています。
しかし、その先の「色が映っているか否か」の判断をどのように行えば良いのかわかりません。そういった事を判定するための関数が用意されているのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+4

2017-11-15 P.M更新
流用できたので載せてしまいますが、次からちゃんとコードを載せてくださいね。


teratailの先日の投稿の回答のコードを流用します。

イメージ1 イメージ2
イメージ説明 イメージ説明

original.pngにリネームして走らせてください。

# -*- coding: utf-8 -*-
import cv2
import numpy as np
##########################################
img = cv2.imread("original.png")
cv2.imshow("ORIGINAL",img)

b,g,r = cv2.split(img)

mask =( b > 200) & (g < 200)

img_masked = cv2.bitwise_and(img,img,mask=mask.astype(np.uint8))

if mask.any():
    print("This image has blue color.")
else:
    print("This image does NOT have blue color.")

cv2.imshow("ORIGINAL-MAKSED",img_masked )

cv2.waitKey(0)


以下先日の投稿


コードが乗っていませんのでザクっとしたことを書きます。


ある色が映っているかどうかはif文で検出できることは分かりますね。

ただここで大事になるのは、「どこに」の話です。

  • 画像全体が○○色なのか
  • 画像の左上1/4が○○色なのか
  • 画像の中のコップが○○色なのか
  • 画像の中に少しでも○○色があるのか

これらでだいぶ処理方法が異なってきます。

やりたいこと 方法 関数(イメージ) 検索キーワード
全体 1pxに縮小+色判定 cv2.resize OpenCV resize python
場所を指定 くりぬき+色判定 img[y:y+h,x+w] OpenCV crop python
モノを指定 くりぬき+色判定 img[y:y+h,x+w] OpenCV 物体検出 python
少しでもあれば 値の検索 if bool_list.any()  python any boolean

これでいかがでしょうか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/15 14:06

    回答ありがとうございます。
    提示していただいた方法は今後確実に参考になります。
    ですが、私が知りたいのはif文で色の有無が検出できるか、なのです。
    初心者ですのでその部分教えていただきたいです。
    どのように記述すればいいでしょうか?

    キャンセル

  • 2017/11/15 18:46

    二値化できているなら特定の色に近い場合の処理がすっ飛ばせますので割と簡単にできそうです。
    (たとえば緑色のところ、と言っても青緑なのか、黄緑なのか、黒に近い緑なのか、いろいろ問題になりますね。二値化していればそれが起きません)

    booleanで二値化すると、[True,True,False,False,True,...]となるハズですね。なので、bool_col = [True,True,False,False,True,...]という感じに収まっているのであれば、
    if any(bool_col):
    print("foobar")
    としておけば、二値化した値の中に1つでもtrueがあれば"foobar"とプリントされます。
    こういうことでしょうか?

    キャンセル

0

画像を二値化されているという事は、画像の中で見るべき箇所が判っているのでしょう。

あとは、二値化によって切り出された領域の画素の色を調べれることになりますが、その方法は「特定の色」が何を意味するのか次第です。

slashさんが書かれているように、
特定の色(例えばRGBが(24,3F,e0))の画素が含まれる。
対象画素の色の平均値が、特定の範囲に含まれる。
など、様々な可能性が考えられますが、osashimiさんが考えていらっしゃる「特定の色」は、どのようなものなのでしょうか?
質問に詳細を追記すると、適切な回答が得られると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python

    8007questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    6415questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • OpenCV

    1081questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

  • Raspberry Pi

    807questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

閲覧数の多いPythonの質問