• ベストアンサー

OpenCVを使用してある物体だけの輪郭を抽出したいです。

OpenCVを使用してある物体だけの輪郭を抽出したいです。 下の画像だと赤い円を抽出したいのに、線も含めた輪郭が抽出されます。 なにか良い方法はありまあせんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

http://www.amazon.co.jp/dp/4839931593 に肌色を検出する方法として 色空間の変更(RGB→HSV) →色相を「肌色に近い」と「肌色から遠い」に分けて2値化 →各種処理 というのが出ています。 赤を抽出するなら、同様にできるのではないでしょうか

aimhighunder17
質問者

お礼

なるほど 大変参考になりました。 ありがとうございます。

関連するQ&A

  • opencv 輪郭を矩形で囲みたい

    プログラミング初心者です opencvを使っています cvFindContours関数を使って図形の輪郭線を求めました(上半分の図形) この画像のように輪郭線を矩形で囲みたいのですがどうすれば良いのでしょうか? 回答よろしくお願いします。

  • 画像処理(高精度な輪郭検出)について

    今年新卒で入社し、医療機器関連のエンジニアとしてスタートしたものです。素人ながら質問させていただきたいと思います。 現在、Visual Studio 2010(言語はC#)とOpenCVを用いて、画像中の輪郭、物体をできるだけ高精度に検出するアルゴリズムの研究を行っています。 基本である差分計算やOpenCVの関数を用いたラプラシアンフィルタやCannyアルゴリズム、輪郭線抽出、RGBからHSV,Lab色空間(Labについては現在も調査中です。)へ変換し、閾値を変えてみるなど試してみました。また、PhotoShopを用いて、コントラストや明るさ、色調変換をかけて、同様に試してみたりもしました。 しかし、画像によっては満足いく輪郭、物体の検出ができない状態です(フリーソフトの輪郭検出器2.10を使ってみても同じでした)。勿論、明るさやレンズの特質等の影響もあるとは思いますが・・・。 そこでお聞きしたいのですが、上記の他にもできるだけ高精度に輪郭や特徴点を検出する手法がありましたら、教えていただける範囲で教えていただけないしょうか。 漠然とした質問で申し訳ありません。どうぞよろしくお願い申し上げます。 今のところ検討中なのは、対象画像に何らかのフィルタをかけて、それから差分や大津の2値化閾値判定を使う、特徴点抽出には、OpenCVのコーナー検出アルゴリズム(Harris等)やSURF等を使うことを考えています。 勿論、上記の事項に応用的に工夫を加える独自のアルゴリズムも検討中です。

  • 画像に対する輪郭線

    色々とネットで調べたのですが思うように行かなくて フォトショップ、ペインター、フォトフィルター、ピクトベアー 輪郭抽出のソフトなど試してみましたが期待通りの結果が出せませんでした 元画像は、金属片の拡大画像で約2500倍に拡大しています 白黒でカラーではないのと、輪郭があまりはっきりしないのともあって 画像を濃淡で表示させ輪郭を抽出しようとしましたが濃淡も薄くて輪郭が抽出されない部分があり困っています 輪郭抽出方法やソフトの情報ありましたらお願いします

  • OpenCVで寸法測定

    カメラで撮影した画像から、精度よく物体の寸法を出すアプリケーションを作ろうと思います。 調べたところ、OpenCVというライブラリを使うと可能そうです。 しかし、OpenCVについては、全く初心者です。 OpenCVに詳しい方に質問ですが、たとえば、ドアの画像から、高さサイズを計算したり出来ますか? 出来るのであれば、方法や関数など、簡単に教えて頂きたいです。参考になるHPがあればありがたいです。 また、OpenCV以外でも、良い方法があれば教えでください。よろしくです。

  • OpenCV輪郭抽出→座標取得でのバグ(C++)

    プログラミング初心者の者です。 今OpenCVを色々勉強してるのですが、全く行き詰ってしまいました。 サンプルを打ち込んだりして、輪郭抽出、表示まではできましたが、それに加えて座標の取得、表示の部分を書いてみたんですが、バグが一向に取れません。 OpenCV2.4.1 Visual Studio2010ExpressC++でやっています。 0x00411845 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000004 を読み込み中にアクセス違反が発生しました。 という内容が表示されます。 以下のようなコードを書きました。 おかしいところもたくさんあると思いますが、何卒ご教示頂ければと思います。 using namespace cv; using namespace std; int i; IplImage *g_image = NULL; IplImage *g_gray = NULL; IplImage *src_img = NULL; IplImage *tmp_img = NULL; int g_thresh = 100;//閾値 CvMemStorage *g_storage = NULL;//データ格納用低レベル構造体 CvFileStorage *fs;//ファイルストレッジ CvTreeNodeIterator it;//イテレータ CvPoint *point,*tmp; void on_trackbar(int){ if( g_storage == NULL ){ g_gray = cvCreateImage( cvGetSize( g_image ), 8, 1 ); g_storage = cvCreateMemStorage(0); } else { cvClearMemStorage( g_storage ); } CvSeq* contours = 0; cvCvtColor( g_image, g_gray, CV_BGR2GRAY ); cvThreshold( g_gray, g_gray, g_thresh, 255, CV_THRESH_BINARY ); cvFindContours( g_gray, g_storage, &contours,sizeof(CvContour ),CV_RETR_TREE,CV_CHAIN_APPROX_NONE); //輪郭抽出 (入力画像、保存先、一番外の輪郭、サイズ、  ) 抽出モード cvZero( g_gray ); if( contours ){ cvDrawContours( g_gray, contours, cvScalarAll(255), cvScalarAll(255), 100 ); } cvInitTreeNodeIterator (&it, contours,1); fs=cvOpenFileStorage("Contours.xml",NULL,CV_STORAGE_WRITE); //輪郭線上を走査 while((contours=(CvSeq*)cvNextTreeNode(&it))!=NULL){ cvClearMemStorage( g_storage ); cvStartWriteStruct(fs,"Contours",CV_NODE_SEQ); for (i=0;i<contours->total;i++){ point=CV_GET_SEQ_ELEM(CvPoint,contours,i); cvLine(g_gray,*tmp,*point,CV_RGB(0,0,255),2); cvStartWriteStruct(fs,NULL,CV_NODE_MAP); cvWriteInt(fs,"x",point->x); cvWriteInt(fs,"y",point->y); //座標取得 cvEndWriteStruct(fs); tmp=point; } cvEndWriteStruct(fs); cvReleaseFileStorage(&fs); } cvShowImage( "Contours", g_gray ); } int _tmain(int argc, _TCHAR* argv[]){ g_image = cvLoadImage( "C:\\OpenCV2.4.1\\opencv\\samples\\c\\lena.jpg" ); //入力画像       cvNamedWindow( "Contours", 1 ); cvCreateTrackbar( "Threshold", "Contours", &g_thresh, 255, on_trackbar ); on_trackbar(0); cvWaitKey(); return 0; }

  • 線の輪郭について

    AUTO CADで図面を書いていると、 線の輪郭が表示されなくなった。  別に図面を書くのに問題はないが 線の輪郭を表示する方法を教えてください。 例 円を書く       円コマンドをクリックする       ↓   中心座標指定する       ↓《輪郭線が現れない》   円の必要半径 等で決定する

  • OpenCV1.1、OpenCV2.3の使い方

    これまでOpenCV1.1を使っていたのですが類似画像検索をするのにHOG特徴量を用いたいと思い、HOG特徴量を求める関数のあるOpenCV2.3もインストールしました。 その際、OpenCV1.1はアンインストールして、最初からプログラムを書き換えないとダメなのでしょうか?ためしに今まで書いていたプログラムにOpenCV2.3のライブラリをインクルードしてみると、それだけで100個以上のビルドエラーが発生してしまいました。CとC++の違いによるものなのでしょうか? あとPathの設定などもOpenCV1.1のときのものを残したまま、OpenCV2.3用のPathを追加しただけなのですが、大丈夫なのでしょうか? 解決方法がわかる方がいらっしゃれば、教えて下さい。よろしくお願いいたします。

  • opencvのシーケンスについて。

    opencvのシーケンスについて。 opencvのシーケンスとは。 opencvを使っていると、よくシーケンスという言葉に遭遇します。本やネットで調べましたが、どんなものなのかがよく分かりません。 メモリストレージ・オブジェクト等と一緒に出てくるのですが、これらもなかなか理解しがたいです… 例えばCvFindCountorという画像内のn個の辺を持つ輪郭を調べるという関数がありますが、これに関する情報が引数として渡したシーケンスに保存されているようだ。というのは何となく感じとったのですが、この中の座標等を引き出すにはどうしたらいいのでしょうか。 どなたか分かりやすくご教授頂けないでしょうか。 また、分かりやすいサイトや本もご存知であれば教えて下さい。

  • OpenCvを利用して画像の置換処理を行いたいです。

    OpenCvを利用して画像の置換処理を行いたいです。 置換処理をする上で背景と物体の分離をしたいです。 なにかよい方法はありませんか? ↓の図の場合、青い円の部分だけを赤い四角に置換したい。

  • 画像の輪郭線を出しdxfで使いたい・変換しても微…

    画像の輪郭線を出しdxfで使いたい・変換しても微少線が多いい。 お手数ですが知恵をお貸しください。 こうゆう事は初めてで、素人なので何も分らず検索しまくっていました。 JPEGのデータの輪郭線を出しdxfに変換しレーザー加工や彫刻機なので使いたいのです。 フリーソフトなど幾つもダウンロードしては使ってみての繰り返しをやってやっと輪郭抽出で Bmptodxfで変換とやっていますが微少線多く困っています。 対策として、印刷しうつし絵を書いてスキャンして輪郭抽出してましたが限界があり困っています。Photoshopで輪郭線わ出したりしましたが線が太く余計にガタガタな線になります。 お金をかければいいソフトもあると思いますが、そんなに高価なものは情けないですがかえません。 改善のやり方などありましたらお願いいたします、知恵をお貸しください。

専門家に質問してみよう