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

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

新規登録して質問してみよう
ただいま回答率
85.35%
OpenCV

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

Python

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

Q&A

1回答

2498閲覧

Opencvで色認識させて、カメラ画像に日本語を表示させたい。

sp1200

総合スコア2

OpenCV

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

Python

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

0グッド

0クリップ

投稿2021/12/20 08:30

現在、Webカメラ画像からリアルタイムに青色を認識させ、青色を検出した時のみカメラ画像に日本語を表示させようとしています。

import numpy as np import cv2 from PIL import ImageFont, ImageDraw, Image cap = cv2.VideoCapture(0) While(1): _, frame = cap.read() hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) lower_light_blue = np.array([100, 45, 70]) upper_light_blue = np.array([105, 255, 255]) mask = cv2.inRange(hsv, lower_light_blue, upper_light_blue) res = cv2.bitwise_and(frame,frame, mask= mask) contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)      if mask.any(): message = '青色 検出' fontpath ='./droid/DroidSansFallbackFull.ttf' font = ImageFont.truetype(fontpath, 32) img_pil = Image.fromarray(frame) draw = ImageDraw.Draw(img_pil) position = (100,800) draw.text(position, message, font = font , fill = (0, 255, 0, 0) ) cv2.imshow("frame",np.array(img_pil)) else: pass cv2.imshow("frame",frame) cv2.imshow('mask',mask) cv2.imshow('res',res) k = cv2.waitKey(5) & 0xFF if k == 27: break cv2.destroyAllWindows()

このプログラムを実行させると、「frame」と「mask」と「res」の3つのウインドが開きます。「frame」にはカメラの画像が写りますが、青色の物体をカメラの前に持ってきても「frame」に「青色 検出」と表示されません。
「cv2.imshow("frame",np.array(img_pil)) 」とその下「cv2.imshow("frame",frame) 」の書き方がわるいのでしょうか?

ご教授のほどお願い申しあげます。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/12/20 21:44 編集

1. 青色が検出されたときのmask.any():の内側にprint("blue")のような「ちゃんと青色が検出できた」ことを保証できる対策を仕込み、ちゃんと青色が確認できていることを確認お願いします。 2. 試しに日本語を半角英語にして試してもらえますか?日本語だからフォントを画像に書き込めない、という可能性があるためです。
sp1200

2021/12/20 23:58

ご回答ありがとうございます。 「print」文で「blue」もきちんと反応します。また、半角英数にしても一切何も表示されません。pillowを使用せず「puttext」で日本語を表示させようとして「????」、「□□□□」、「☒☒☒☒」となるような表示も一切されません。
yominet

2021/12/21 06:00

ちょっと昔の記憶でOpenCVの仕様が変わっていたらごめん・・と前置きして imshowは、描画待機用のバッファに転送するだけで描画しない。 実際に画面に描画されるタイミングはwaitKey()を呼んだとき。 私の読み違えがなければ、このソースだとwatiKeyのタイミングでは かならずframeの内容しか表示されない状態になっていると思います。
sp1200

2021/12/21 08:25

ご回答ありがとうございます。 たしかにそうで、リアルタイムのカメラ画像「frame」が表示されるのみなんです。 ちなみにプログラムの下から8行目「cv2.imshow('frame',frame) 」を削除して実行させて、青色の物体をカメラの前に持ってくるとると「frame」画面に「青色 検出」と表示されるリアルタイム画像が表示されますが、青色の物体を取り去ったとたん、「frame」画面は静止画になります。
guest

回答1

0

解決しました。fourteenlength様とyominet様とやり取りしている内に、「if mask.any():」の後の条件「else:」に「cv2.imshow('frame',frame) 」を持ってくればよいことに気づきました。慌てていて気づきませんでした。お二人、ありがとうございました。

投稿2021/12/21 08:45

sp1200

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問