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

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

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

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

Q&A

解決済

2回答

569閲覧

cv2で複数の円を描画する方法

yt4e3

総合スコア1

Python

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

0グッド

0クリップ

投稿2023/06/08 06:46

実現したいこと

PythonのCV2を用いて複数の円を描画する
csvファイルに円の中心の座標情報があり,それを読み込みcv2で円を書く

前提

私はPython初心者なのですが
x,yの中心座標をcv2に書き込むと
エラーが出てしまいます

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

OpenCV(4.6.0) 👎 error: (-5:Bad argument) in function 'circle'

Overload resolution failed:

  • Can't parse 'center'. Expected sequence length 2, got 7
  • Can't parse 'center'. Expected sequence length 2, got 7

該当のソースコード

import cv2
import numpy as np
import pandas as pd

img = np.ones((600,600,3)) * 255

df = pd.read_csv("12345.csv")

x = df.iloc[:,1]
y = df.iloc[:,2]

cv2.circle(img, np.array(x, y), 10, (255, 255, 0), -1)
cv2.imshow("r_circle",img)
cv2.imwrite("r_circle.png",img)
cv2.waitKey(0) #キー入力待ち
cv2.destroyAllWindows()

試したこと

csvファイルには
中心座標x yが
10 25
40 30
50 40

といった感じでならんでいます.
無理やりnp arrayでコードを作ってみましたが,エラーが出て行き詰っています.

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

cv2.circle() に複数の中心座標(np.array(x, y))を与えたためにエラーが生じたと思われます。そこで複数回実行する形にすれば,うまくいくようです。

余談ですが,エラー内容(got 7)からすると csv ファイルは 7行でしょうか。

Python

1import cv2 2import numpy as np 3import pandas as pd 4 5img = np.ones((600, 600, 3)) * 255 6 7# df = pd.read_csv("12345.csv") 8df = pd.DataFrame([[10, 25], [40, 30], [50, 40]]) 9print(df) 10## 0 1 11## 0 10 25 12## 1 40 30 13## 2 50 40 14 15# x = df.iloc[:, 1] 16# y = df.iloc[:, 2] 17x = df.iloc[:, 0] 18y = df.iloc[:, 1] 19 20# cv2.circle(img, np.array(x, y), 10, (255, 255, 0), -1) 21for xc, yc in zip(x, y): 22 cv2.circle(img, (xc, yc), 10, (255, 255, 0), -1) 23 24cv2.imshow("r_circle", img) 25cv2.imwrite("r_circle.png", img) 26cv2.waitKey(0) # キー入力待ち 27cv2.destroyAllWindows()

r_circle.png
r_circle.png

投稿2023/06/12 03:49

little_street

総合スコア387

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

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

yt4e3

2023/06/13 01:56

ご返信ありがとうございます. 今回は7桁ですが,たくさん桁がある場合に対応するためcsvから読み込む形を採用しています.
guest

0

python

1import cv2 2import numpy as np 3import pandas as pd 4 5img = np.ones((600,600,3)) * 255 6df = pd.read_csv("12345.csv", header=None) 7df.apply(lambda c: cv2.circle(img, c, 10, (255, 255, 0), -1), axis=1) 8 9cv2.imshow("r_circle",img) 10cv2.imwrite("r_circle.png",img) 11cv2.waitKey(0) #キー入力待ち 12cv2.destroyAllWindows()

12345.csv

csv

110,25 240,30 350,40

r_circle.png

投稿2023/06/08 07:43

melian

総合スコア20136

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.42%

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

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

質問する

関連した質問