2

VS2010 で OPENCV プロジェクトを作成しましたが、期待どおりの結果が得られなかったため、デバッガーを実行して問題の場所を確認しました。読み込まれた画像内のデータを見たいと思ったとき、その方法がわかりませんでした。画像内のデータを見たい場合はどうすればよいですか? 画像のさまざまなチャネルを表示するのは、matlab では非常に簡単です。

a=imread('test.jpg');
p1 = a(:,:,1)
p2 = b(:,:,2)

.
.

opencv で同じことを書きましたが、Matlab のようにすべての要素を一度に見る方法がわかりません。

a= imread("test.jpg")
split(a,planes);
    vector<Mat> T1;
    T1 = planes[0];  

// コードのデバッグ時に T1 内のデータを表示するにはどうすればよいですか?

4

7 に答える 7

6

これはあなたが探しているものだと思います-それは素晴らしいVisual Studioアドオンです

https://bitbucket.org/sergiu/opencv-visualizers

インストーラーをダウンロードし、VS が閉じていることを確認して実行し、VS を再度開いてください。これで、OpenCV データ構造をポイントすると、あらゆる種類の優れた情報が表示されます。

制限事項: マルチチャンネル画像 (最初のチャンネルしか表示されない) にいくつか問題があり、大きなマトリックスの表示にも問題があります。大きなマトリックスで生データを表示したい場合は、デバッグ変数を使用した古い優れた VS トリックを使用できます。ブレークポイントで停止し、[監視] タブに移動して、そこに書き込みます。

((float*)myMat.data) ,10

float は行列の種類、myMat は行列、10 は出力する値の数です。myMat.data のメモリ位置にある最初の 10 個の値が表示されます。データ型を正しく選択しないと、ゴミが表示されます。私の例では、myMat は cv::Mat 型です。

そして、ビジュアライザーの力を決して忘れないでください。

imshow("Image", myMat);

データが画像に収まる場合。contrib モジュールのカラーマップを使用して、ビジュアライザーを強化できます。

于 2012-08-14T09:01:12.310 に答える
5

Image Watchをまだ誰も提案していないなんて、本当に信じられません。これまでで最も素晴らしいアドインです。デバッグ中にすべての Mat 変数 (イメージ (グレーとカラー)、マトリックス) を含むビューが表示されます。ズームやコントラスト ストレッチなどの便利な機能があり、より複雑な関数をプラグインにリアルタイムで直接適用することもできます。これにより、あらゆる種類の画像操作のデバッグが簡単になり、cv::Mat 行列を使用して計算や線形代数を行う場合に非常に役立ちます。

ここに画像の説明を入力

于 2014-06-13T00:45:03.080 に答える
0

NativeViewer拡張機能を使用することをお勧めします。適切にフォーマットされた情報だけでなく、実際に画像の内容をプレビュー ウィンドウに表示します。

于 2012-12-04T09:30:59.857 に答える
0

imagewatch をダウンロードした後、ウォッチ ウィンドウでコマンドを使用します (imagesLoc._Myfirst)[0]

ベクトル内のイメージのインデックス

于 2014-11-26T15:11:50.410 に答える
0

このような即時ウィンドウと拡張メソッドを使用できます

    /// <summary>
    /// Displays image
    /// </summary>
    public static void Display (this Mat m, Rect rect = default, string windowName = "")
    {
        if (string.IsNullOrEmpty(windowName))
        {
            windowName = m.ToString();
        }
        var img = rect == default ? m : m.Crop(rect);

        double coef = Math.Min(1600d / img.Width, 800d / img.Height);

        Cv2.ImShow(windowName, img.Resize(new Size(coef * img.Width, (coef * img.Height) > 1 ? coef * img.Height : 1)));
        Cv2.WaitKey();
    }

次に、ブレークポイントで停止し、即時ウィンドウで yourImage.Display() を呼び出します。

于 2020-08-30T08:21:11.093 に答える