「みんな教えて! 選手権!!」開催のお知らせ

Visual Studio C#
OpenCvSharp4 (4.1.0.20190416)
Form上にpictureBoxを1つ配置

ある領域の位置座標を検出するプログラムを作成しています。
(たとえば空の写真の中の雲を探すというような)
以下のプログラムで2値化した領域の中心(重心?)座標を得ることはできるのですが
添付画像のようにC型の雲だったり、ドーナツ状の穴の開いた雲だったりする場合に
検出した座標は白領域外(黒い部分上)になってしまいます。
このような画像でそれなりに白い領域の中心座標を得たいのですが
良い方法などありますでしょうか?
ご教授いただければ幸いです。
=========================================================
using System;
using System.Windows.Forms;
using OpenCvSharp;
using OpenCvSharp.Extensions;

namespace WindowsFormsApp4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Shown(object sender, EventArgs e)
{
Mat img = Cv2.ImRead(@"D:\1.jpg");
Mat dst = new Mat();
Cv2.CvtColor(img, dst, ColorConversionCodes.BGR2GRAY);//グレースケール化
Cv2.Threshold(dst, dst, 0, 255, ThresholdTypes.Otsu);//2値化
ConnectedComponents cc = Cv2.ConnectedComponentsEx(dst);
if (cc.Blobs.Count > 0)
{
ConnectedComponents.Blob bold = cc.GetLargestBlob();
img.Circle((int)bold.Centroid.X, (int)bold.Centroid.Y, 5, Scalar.Cyan, 4);
}
pictureBox1.BackgroundImage = img.ToBitmap();
}
}
}

以上、宜しくお願い致します。

「OpenCvSharp4による画像判定解」の質問画像

A 回答 (1件)

>白い領域の中心座標を得たい


それならば、まず質問者が望む、
 白い領域の「中心座標」が白い点であることを保証する「中心座標」
の定義をしてください。
例えば、添付されたC型の雲のどこを「中心座標」と定義したいのでしょう?

例えば、
 横にスキャンして白領域の長さが最長の部分の中心点
と定義されるなら簡単にプログラミングできると思いますが、その定義で目的を達成されますでしょうか?

>良い方法などありますでしょうか?
>ご教授いただければ幸いです。
定義ができれば、プログラムのアドバイスもできると思います
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報