🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

1467閲覧

OpenCV リアルタイムで検出した円の半径を求めたい

kouuu

総合スコア4

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/10/30 11:01

USBカメラを用いてリアルタイムで円を検出する以下のプログラムに、検出した円の半径を求めるプログラムを追加したいです。どうすればよいでしょうか。

該当のソースコード

C++

1#include "stdafx.h" 2#include <stdio.h> 3#include <opencv/cv.h> 4#include <opencv2/highgui/highgui.hpp> 5#include <opencv2/imgcodecs/imgcodecs.hpp> 6#include <opencv2/imgproc/imgproc.hpp> 7#include <opencv2/core/core.hpp> 8 9int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) 10{ 11 12 int i; 13 float *p; 14 double w = 320, h = 240; 15 16 IplImage *src_img = 0, *gray_img = 0; 17 CvMemStorage *storage; 18 CvSeq *circles = 0; 19 CvCapture *capture = 0; 20 21 22 /* カメラの設定 */ 23 capture = cvCreateCameraCapture(0); 24 25 // (2)キャプチャサイズを設定する. 26 cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, w); 27 cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, h); 28 29 30 cvNamedWindow("circles", CV_WINDOW_AUTOSIZE); 31 32 33 while (1) { 34 35 36 src_img = cvQueryFrame(capture); 37 38 CvSize sizeOfImage = cvGetSize(src_img); 39 gray_img = cvCreateImage(cvGetSize(src_img), IPL_DEPTH_8U, 1); 40 41 // グレイスケールに変換 42 cvCvtColor(src_img, gray_img, CV_BGR2GRAY); 43 44 45 // (2)ハフ変換のための前処理 46 cvSmooth(gray_img, gray_img, CV_GAUSSIAN, 11, 11, 0, 0); 47 storage = cvCreateMemStorage(0); 48 49 // (3)ハフ変換による円の検出と検出した円の描画 50 51 circles = cvHoughCircles(gray_img, storage, CV_HOUGH_GRADIENT, 52 1, 100, 20, 50, 10, MAX(gray_img->width, gray_img->height)); 53 54 for (i = 0; i < circles->total; i++) { 55 p = (float *)cvGetSeqElem(circles, i); 56 cvCircle(src_img, cvPoint(cvRound(p[0]), cvRound(p[1])), 3, CV_RGB(0, 255, 0), -1, 8, 0); 57 cvCircle(src_img, cvPoint(cvRound(p[0]), cvRound(p[1])), cvRound(p[2]), CV_RGB(255, 0, 0), 3, 8, 0); 58 } 59 60 // (4)検出結果表示用のウィンドウを確保し表示する 61 cvShowImage("circles", src_img); 62 cvWaitKey(10); 63 const int key = cv::waitKey(1); 64 if (key == 'q') 65 { 66 break; 67 } 68 } 69 70 cvDestroyWindow("circles"); 71 cvReleaseImage(&src_img); 72 cvReleaseImage(&gray_img); 73 cvReleaseMemStorage(&storage); 74 75 return 0; 76 77}

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

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

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

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

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

guest

回答1

0

cvHoughCircles()を使おうとした時点で当然のことながら一度はその使い方をリファレンスか何かを調べたでしょうから,
円の径も結果パラメータとして得られることは既知なのではないのでしょうか?

忘れてしまったとかなら,再度cvHoughCirclesでググるなりすれれば良いかと思います.

投稿2019/10/30 11:21

fana

総合スコア11985

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問