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

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

新規登録して質問してみよう
ただいま回答率
85.37%
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

Q&A

解決済

3回答

1826閲覧

Python3 取得した色で描画する方法

mia_flower

総合スコア66

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

0グッド

0クリップ

投稿2021/08/24 00:41

編集2021/08/24 11:25

前提・実現したいこと

指定した座標から、色を取得し、
その色で長方形を描きたいと考えています。

発生している問題・エラーメッセージ

以下のソースコードの⭐️部分に取得した色を代入したらよいのかな?と思ったのですが
代入する方法がわからず、困っております。

初心者でわからないことばかりですが、
教えていただける方がいらっしゃいましたら幸いです。

どうぞ宜しくお願い致します。

該当のソースコード

import cv2 # cascade file settings cascade_file_path = "パス名" face_cascade = cv2.CascadeClassifier(cascade_file_path) cap = cv2.VideoCapture(0) flag, frame = cap.read() while flag == True: img = frame img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) face_list = face_cascade.detectMultiScale(img_gray, minSize=(100, 100)) #認識する顔の最小サイズ指定 for (x, y, w, h) in face_list: pos = (x, y) color = img[pos] print(f"Image[{pos}] = BGRA{color}") cv2.rectangle(frame, (x, y), (x+w, y+h), ⭐️,thickness=-1) #(対象の画像、左上の座標、右下の座標、色) thicknessで線の太さを指定、マイナスだと塗り潰し cv2.imshow("cap", frame) key = cv2.waitKey(30) if key == 27: break flag, frame = cap.read() cv2.destroyAllWindows() cap.release()

試したこと

print(f"Image[{pos}] = BGRA{color}")で色を取得し、printする事はできました。

環境

macOS
Python3.8

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

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

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

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

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

1T2R3M4

2021/08/24 00:53

リファレンスやその他メソッドの解説ページとかは見ないのでしょうか。
mia_flower

2021/08/24 01:00

コメントして頂きましてありがとうございます。 初歩的な質問で大変恐縮ですが、本やインターネットの解説ページを読んでも理解できなかった為 質問させて頂きました。
guest

回答3

0

ベストアンサー

cv2.rectangle(frame, (x, y), (x+w, y+h), ⭐️,thickness=-1)

frame_with_rect = cv2.rectangle(frame, (x, y), (x+w, y+h), image=image,thickness=-1)
cv2.imshow("cap", frame_with_rect)

とすれば、長方形を書くことができるはずです。元画像に追加するのではなく、長方形を追加した画像を返すためです。

なお、円を描きたいならrectangleではなく、circleでしょう。

Python, OpenCVで図形描画(線、長方形、円、矢印、文字など)

投稿2021/08/24 03:33

ppaul

総合スコア24668

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

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

mia_flower

2021/08/24 11:35 編集

ご回答頂きましてありがとうございます。 ーーーーー for (x, y, w, h) in face_list: pos = (x, y) color = img[pos] print(f"Image[{pos}] = BGRA{color}") frame_with_rect = cv2.rectangle(frame, (x, y), (x+w, y+h), image=image, thickness=-1) cv2.imshow("cap", frame_with_rect) key = cv2.waitKey(30) ーーーーー としたところ、 name 'image' is not definedというエラーメッセージが出てしまいました。 そこで、 ーーー frame_with_rect = cv2.rectangle(frame, (x, y), (x+w, y+h), color=color, thickness=-1) ーーー としてみたのですが、 error: OpenCV(4.5.3) :-1: error: (-5:Bad argument) in function 'rectangle' > Overload resolution failed: > - Scalar value for argument 'color' is not numeric > - Scalar value for argument 'color' is not numeric > - argument for rectangle() given by name ('color') and position (3) > - argument for rectangle() given by name ('color') and position (3) ーーー というエラーがでてしまいました。 どうしたらよろしいでしょうか。 (質問にて、誤って長方形ではなく円と記述しておりましたので修正致しました。ご指摘感謝します。)
guest

0

rectangleの引数colorを指定するのでは駄目なのでしょうか?

python

1cv2.rectangle(frame, (x, y), (x+w, y+h), color=color, thickness=-1)

投稿2021/08/24 01:57

TANAKAKazuyoshi

総合スコア96

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

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

mia_flower

2021/08/24 11:37

ご回答頂きましてありがとうございます。 教えて頂いたコードに書き換えてみたところ、以下のようなエラーメッセージ が出てしまいました。 error: OpenCV(4.5.3) :-1: error: (-5:Bad argument) in function 'rectangle' > Overload resolution failed: > - Scalar value for argument 'color' is not numeric > - Scalar value for argument 'color' is not numeric > - argument for rectangle() given by name ('color') and position (3) > - argument for rectangle() given by name ('color') and position (3)
TANAKAKazuyoshi

2021/08/25 02:37

colorの値が数値のタプル型になっていないようですね。 colorの値がどんな型になっているか確認し、必要であればintで数値にしてやればいいかと思います。
guest

0

以下でできるかと思います。

python

1for (x, y, w, h) in face_list: 2 pos = (x, y) 3 color = [int(v) for v in img[pos]] 4 cv2.rectangle(frame, (x, y), (x+w, y+h), color, thickness=-1)

投稿2021/08/24 14:40

編集2021/08/25 04:22
etherbeg

総合スコア1195

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問