この記事について

  • この記事はComputer Vision Advent Calendar 2012の5日目*1の担当記事です。タイトルが4日目になってるのは、手島が担当したのが4日目、という意味。
  • 詳しくは(ry*1

画像の並べ

  • OpenCV を使ってると、画像を並べて表示したくなることが多々ある。
  • ない人はきっとこれから多々ある。
  • どれだけ短く連結できるか、って2、3パターン書いてたら、 opencv.jp*2 にhconcatとかvconcatなんて便利な関数が紹介されてた*3ので、そっと涙を拭いて寝ることにした*4
  • ただ、 @wk77 さん*5からソースコードの提供を頂いたので、代理でこのwikiに投稿

ソースコード

  • C#のソースコード
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Windows;
    6. using System.Windows.Controls;
    7. using System.Windows.Data;
    8. using System.Windows.Documents;
    9. using System.Windows.Input;
    10. using System.Windows.Media;
    11. using System.Windows.Media.Imaging;
    12. using System.Windows.Navigation;
    13. using System.Windows.Shapes;
    14.  
    15. namespace OpenCvSharpWithWpf
    16. {
    17. /// <summary>
    18. /// MainWindow.xaml の相互作用ロジック
    19. /// </summary>
    20. public partial class MainWindow : Window
    21. {
    22. public MainWindow()
    23. {
    24. InitializeComponent();
    25.  
    26. // OpenCvSharp をダウンロードする。
    27. // http://code.google.com/p/opencvsharp/
    28. // Open CV にパスが通っていることを確認する。
    29. // .NET 4.0 の WPF のプロジェクトを作る。
    30. // OpenCvSharp.dll と OpenCvSharp.Extensions.dll への参照を追加する。
    31. // (このプロジェクトファイルでは OpenCvSharpDlls 内にファイルをコピーして、参照を追加した。)
    32. // ここから下のコードを追加する。
    33. // 普段は using OpenCvSharp; とかしてる。
    34. var openFileDialog = new Microsoft.Win32.OpenFileDialog();
    35. if (openFileDialog.ShowDialog() != true) { return; }
    36. OpenCvSharp.IplImage loadedIplImage;
    37. try { loadedIplImage = new OpenCvSharp.IplImage(openFileDialog.FileName); }
    38. catch { return; }
    39.  
    40. var srcIplImage = new OpenCvSharp.IplImage(30, 30, loadedIplImage.Depth, loadedIplImage.NChannels);
    41. OpenCvSharp.Cv.Resize(loadedIplImage, srcIplImage);
    42. Func<System.Windows.Controls.Image> getImageFunc = new Func<System.Windows.Controls.Image>(() =>
    43. {
    44. var iplImage = srcIplImage.Clone();
    45. var bitmapSource = OpenCvSharp.Extensions.BitmapSourceConverter.ToBitmapSource(iplImage);
    46. var wpfImage = new System.Windows.Controls.Image() { Stretch = System.Windows.Media.Stretch.None };
    47. wpfImage.Source = bitmapSource;
    48. return wpfImage;
    49. });
    50. var horizontalStackPanel = new System.Windows.Controls.StackPanel() { Orientation = System.Windows.Controls.Orientation.Horizontal };
    51. var verticalStackPanel = new System.Windows.Controls.StackPanel() { Orientation = System.Windows.Controls.Orientation.Vertical };
    52. var uniformGrid = new System.Windows.Controls.Primitives.UniformGrid() { Rows = 2, Columns = 3 };
    53. var wrapPanel = new System.Windows.Controls.WrapPanel() { Width = srcIplImage.Width * 2 };
    54. for (int i = 0; i < 5; i++)
    55. {
    56. horizontalStackPanel.Children.Add(getImageFunc());
    57. verticalStackPanel.Children.Add(getImageFunc());
    58. uniformGrid.Children.Add(getImageFunc());
    59. wrapPanel.Children.Add(getImageFunc());
    60. }
    61. var windowContent = new System.Windows.Controls.Primitives.UniformGrid() { Rows = 2, Columns = 2 };
    62. windowContent.Children.Add(horizontalStackPanel);
    63. windowContent.Children.Add(verticalStackPanel);
    64. windowContent.Children.Add(uniformGrid);
    65. windowContent.Children.Add(wrapPanel);
    66. this.Content = windowContent;
    67. this.SizeToContent = System.Windows.SizeToContent.WidthAndHeight;
    68. }
    69. }
    70. }

実行結果

Result_121204.png

ソースコード

最後に


*1  Computer Vision Advent Calendar 2012, 2012-12-01閲覧
*2  http://opencv.jp/, 2012-12-04閲覧
*3  画像処理 — OpenCV-CookBook, 2012-12-04閲覧
*4  @tomoaki_teshima, 2012-12-04閲覧
*5  @wk77, 2012-12-04閲覧
*6  @sakanazensen, 2012-12-01閲覧

添付ファイル: fileOpenCvSharpWithWpf_121204-2344.zip 475件 [詳細] fileResult_121204.png 530件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-12-08 (土) 14:29:51 (2384d)