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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

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

OpenCV

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

C++

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

Q&A

解決済

1回答

314閲覧

OpenCvを使用して、画像サイズを変更せずに特定のオブジェクトの面積を大きくしたい

ianaka3

総合スコア24

Visual Studio

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

OpenCV

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

C++

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

0グッド

0クリップ

投稿2023/06/02 13:23

実現したいこと

  • 画像サイズを変更せずに、あるオジェクト(図形)のサイズを大きくしたい。
  • ここではあるオブジェクトを丸とします。前提の図をご参照ください。

前提

OpenCV2.XとC++を使用して画像処理プログラムを作成しています。
下図のような図形を丸と長方形に分割し、それぞれ2値化しました。

2値化までは出来ていますが、その先がうまくできずに悩んでおります。

イメージ説明

発生している問題

  • 2値化した丸の面積を大きくしたいのですが、その方法が思いつきません。
  • 画像全体サイズ(縦と横の大きさ)と丸の中心を変更することなく、丸面積を大きくしたい。
  • OpenCvのresizeメソッドは画像全体のサイズ(縦と横の大きさ)が大きくなってしまうので、使用不可と思っています。

該当のソースコード

すいません。 ソースコードはありません。

試したこと

丸の輪郭を取得し、元々の丸と輪郭を新しい図形とすれば、丸の面積を大きくできるのではないかと考えました。
しかし、輪郭線は図形の内側に描画されるため、輪郭を取得しても面積を大きくすることはできませんでした。

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

  • Visual Studio 2015
  • C++
  • OpenCv 2.X

仕事で昔からある環境を引き継いだため、だいぶ古いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

輪郭

図形形状次第では,単に輪郭を適当に膨らませて塗りつぶし描画すればよいのでは? と思うのですが,それだと問題があるのでしょうか?
(円であれば,輪郭点群の座標を円の中心から適当に遠ざければ良いですよね)

あるいは,

2値化した丸

があるのなら,こいつにモルフォロジ演算(cv::dilate とか)を適当に用いてやれば図形を「太らせる」ことができるでしょう.

投稿2023/06/05 01:14

fana

総合スコア11654

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

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

ianaka3

2023/06/07 04:47

fana様、 ご回答いただき、ありがとうございます。 >(円であれば,輪郭点群の座標を円の中心から適当に遠ざければ良いですよね) 具体的な内容まで記載いただき、ありがとうございます。 私がOpenCvをちゃんと分かっていないので、申し訳ないのですが、 中心から輪郭点群を遠ざけるところが理解できないです。 OpenCvを利用して輪郭を抽出すると、図形の内側に輪郭が描画されると思います。 その輪郭点群の座標をイジって、図形の外側に移動させるイメージでしょうか?
fana

2023/06/07 04:57

「輪郭」を「点群の座標」という形のデータで表現していて, 且つ,その「輪郭」に「中心」という位置を定めることができる状況下においては… 例えば個々の点の座標を「中心」からの距離が2倍になるように(「中心」から遠ざかる方向に)動かせば,輪郭の形状は変わらずにサイズが大きくなるよね,っていうだけの話. (OpenCVを使っていようがいまいがこの話には関係ない) 後は,その結果を塗りつぶし描画でもすればよいのでは.
fana

2023/06/07 04:58

> 輪郭点群の座標をイジって、図形の外側に移動させるイメージ が上記のことを指しているのであれば,まったくそのとおり.
ianaka3

2023/06/08 02:21

fana様ありがとうございます。 認識は合わせることができたと思います。 >例えば個々の点の座標を「中心」からの距離が2倍になるように(「中心」から遠ざかる方向に)動かせば,輪郭>の形状は変わらずにサイズが大きくなるよね,っていうだけの話. やるべきことは分かったのですが、これを実現する関数がOpenCVのどれにあたるのかが分からないです。 findcontoursで輪郭を取得できそうだという所までは分かっていますが、取得した輪郭点群の座標を動かすというところが不明です。
fana

2023/06/09 03:08

> これを実現する関数がOpenCVのどれにあたるのか 当たり前の話ですが,誰かが何かをしたいときにその全てがあらかじめ用意されているわけではありません. 検索やOpenCVのリファレンスのチェックなどをしてみても使えそうなものが見つからないならば,「無いんだろうな」と判断して自身で実装すべきでしょう. まず findContours が返してくる結果とは何か?(どんなデータなのか?) について調べるとよいでしょう. (ざっくり言えば,座標の集合ですが,findContoursに指定した引数次第でどんなデータなのかが変わり得ます.) 個々の座標値にアクセスする手段さえわかれば,あとはあなたがやりたいことについては自前で実装すればよいです.(そこはもう,ただの計算なのですし)
ianaka3

2023/06/09 22:41

fana様 ありがとうございました。 引き続き調査していきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問