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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

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

OpenCV

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

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

1968閲覧

OpenCVSharpでMat形式の画像をSharpGLで描画しようとすると、真っ白になり描画できない。

AsPulse

総合スコア35

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

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

OpenCV

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

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2021/05/27 12:30

編集2021/05/27 12:33

前提・実現したいこと

OpenCVSharpでMatの形式をした画像データがあり、それをWPF上のSharpGLコントロールに描画したいです。

発生している問題・エラーメッセージ

エラーはなく起動するが、画像は描画されず真っ白な状態になります。

該当のソースコード

csharp

1using OpenCvSharp; 2using SharpGL; 3 4using System.Windows.Controls; 5using System.Windows.Input; 6 7 8namespace [プロジェクト名] 9{ 10 11 public partial class [クラス名] 12 { 13 uint[] texId = new uint[1]; 14 15 public Edit() 16 { 17 InitializeComponent(); 18 } 19 20 private void OpenGLControl_OpenGLInitialized(object sender, SharpGL.WPF.OpenGLRoutedEventArgs args) 21 { 22 OpenGL gl = args.OpenGL; 23 Mat mat = //ここにMatを取得する処理が書かれています。 24 gl.Enable(OpenGL.GL_TEXTURE_2D); 25 26 gl.GenTextures(1, texId); 27 gl.BindTexture(OpenGL.GL_TEXTURE_2D, texId[0]); 28 29 gl.TexImage2D(OpenGL.GL_TEXTURE_2D, 0, (int)OpenGL.GL_RGB, mat.Size().Width, mat.Size().Height, 0, 30 OpenGL.GL_BGR_EXT, OpenGL.GL_UNSIGNED_BYTE, mat.Data); 31 32 33 } 34 35 private void OpenGLControl_OpenGLDraw(object sender, SharpGL.WPF.OpenGLRoutedEventArgs args) 36 { 37 OpenGL gl = args.OpenGL; 38 gl.LoadIdentity(); 39 gl.Enable(OpenGL.GL_TEXTURE_2D); 40 gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); 41 42 gl.BindTexture(OpenGL.GL_TEXTURE_2D, texId[0]); 43 44 gl.Begin(OpenGL.GL_QUADS); 45 gl.TexCoord(0, 0); gl.Vertex(-1, -1); 46 gl.TexCoord(0, 1); gl.Vertex(-1, 1); 47 gl.TexCoord(1, 1); gl.Vertex(1, 1); 48 gl.TexCoord(1, 0); gl.Vertex(1, -1); 49 gl.End(); 50 51 gl.Disable(OpenGL.GL_TEXTURE_2D); 52 gl.Flush(); 53 } 54 } 55} 56

XAML

1// コード冒頭にxmlns:sharpGL="clr-namespace:SharpGL.WPF;assembly=SharpGL.WPF" と記載されています。 2 3<sharpGL:OpenGLControl OpenGLInitialized="OpenGLControl_OpenGLInitialized" 4OpenGLDraw="OpenGLControl_OpenGLDraw" Width="960" Height="540"></sharpGL:OpenGLControl>

試したこと

Matデータそのものに問題があることを疑い、OpenCVの方の機能を使い

csharp

1Mat mat = //ここにMatを取得する処理が書かれています。 2Cv2.ImShow("画像表示ウィンドウ", mat);

と追加し表示させてみたところ、正常に表示されました。

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

SharpGL.WPF (3.1.1)
OpenCVSharp (2.4.0.1) ※ともにNuGetで取得


回答いただけると幸いです。

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

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

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

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

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

guest

回答1

0

自己解決

WPFだったので、OpenCVSharpから離れWriteableBitmapを使うことでプロジェクトの問題は解決しました。
OpenCVSharpでの解決法があれば引き続き教えてくださると幸いです。

参考サイト: https://www.peliphilo.net/archives/2313

投稿2021/05/30 14:18

AsPulse

総合スコア35

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問