61759


お世話になります。  
二値化されたMATデータ（以下、便宜上「画像」と表現）から矩形領域だけ取り出して、その領域のコンツァ画像を表示したのですが上手くいきません。

  1. 目的  
元画像から矩形領域で切り抜いたデータのコンツァ情報及び各Blobのデータを取得したい。

  2. 詳細

下記、関数1、関数2を使用しています。  
関数1では一見うまく切り出せており、BitmapConverter.ToBitmapでピクチャボックスに表示させると元画像が矩形領域だけ切り出された画像が下図のように表示されます。  
[![画像の説明をここに入力](https://i.stack.imgur.com/TytMc.jpg)](https://i.stack.imgur.com/TytMc.jpg)図①
→
[![画像の説明をここに入力](https://i.stack.imgur.com/rQ5IF.jpg)](https://i.stack.imgur.com/rQ5IF.jpg)図②

次に切り抜いた画像からOpenCvSharp.Blobを使用して関数2でコンツァ画像を抜き出そうとすると切り出したはずの画像ではなく元画像の方の形状が取得されます。  
[![画像の説明をここに入力](https://i.stack.imgur.com/AJtw0.jpg)](https://i.stack.imgur.com/AJtw0.jpg)図③  
Blobsデータの中身（個数、各blobの重心や面積）を確認しましたが、切り抜かれる前のデータ（図①）のようでしたのでnew
CvBlobsした時から現象が発生しているようです。  
目的としては、ここで図②のコンツァとBlobsデータを取得したいのですが、この様になり出来ません。  
切り出し方が悪いのか色々試しましたが上手くいかずご教示お願いいたします。

  3. 関数

関数1（元画像（Cv2.Thresholdで二値化済み）から矩形領域だけ切り抜いた画像「this.RsltMat」を作る関数）

[code]

    using System;
    using System.Drawing;
    using OpenCvSharp;
    using OpenCvSharp.Blob;
    using OpenCvSharp.Extensions;
    
    public void Func1(Mat SrcMat, params int[] args)
    {
        Mat DstMat = SrcMat.Clone();
    
        //矩形作成
        Rect setRect = new Rect(args[0], args[1], args[2], args[3]);
        Mat WorkMat = new Mat(SrcMat.Rows, SrcMat.Cols, MatType.CV_8UC1, 1);
        Cv2.Rectangle(WorkMat, setRect, 255, -1);
    
        //マスクで切り抜き
        WorkMat.CopyTo(DstMat, SrcMat);
        WorkMat.Dispose();
    
        this.RsltMat = DstMat;
     }
    
[/code]

関数2（切り抜いた画像「this.RsltMat」からコンツァ画像「this.ContourMat」を取り出す関数）

[code]

    public void Func2(params int[] args)
    {
        this.Blobs = new CvBlobs(this.RsltMat);
        this.ContourMat = new Mat(this.RsltMat.Rows, this.RsltMat.Cols, MatType.CV_8UC3, 3);
        Mat outmat = ContourMat.Clone();
    
        for (Int32 Index = 0; Index < this.Blobs.Count; Index++)
        {
            CvContourChainCode cc = Blobs[Index + 1].Contour;
            cc.Render(outmat, Scalar.Red);
            Cv2.BitwiseOr(this.ContourMat, outmat, this.ContourMat);
        }
    }
    
[/code]

  4. 環境  
OS：Windows10 Pro  
開発環境：Visual Studio 2017 Express  
OpenCV：OpenCvSharp3-AnyCPU バージョン 4.0.0.20181129


CC BY-SA 4.0
2019-12-25T06:28:13.177
61757
2019-12-25T09:30:59.353
35965
question
c# opencv
OpenCvSharpで切り出したはずのMATデータがうまく取得できない


すみません、自己解決しました。  
切り出し画像の作成方法に問題があり、修正することで正しいBlobsが取得できるようになりました。


CC BY-SA 4.0
2019-12-25T09:30:59.353
61759
2019-12-25T09:30:59.353
35965
61757
answer