#contents

*この記事について [#k3cf209a]
-この記事は[[Computer Vision Advent Calendar 2012>http://partake.in/events/13622c9b-3ada-4dd8-a967-56fe8927541b]]の4日目&note{cv-advent-calendar:[[Computer Vision Advent Calendar 2012>http://partake.in/events/13622c9b-3ada-4dd8-a967-56fe8927541b]], 2012-12-01閲覧};の(ry
-詳しくは(ry&note{cv-advent-calendar};


*画像の並べ [#s482c4b7]
-OpenCV を使ってると、画像を並べて表示したくなることが多々ある。
-ない人はきっとこれから多々ある。
-どれだけ短く連結できるか、って2、3パターン書いてたら、 opencv.jp&note{opencvjp:http://opencv.jp/, 2012-12-04閲覧}; にhconcatとかvconcatなんて便利な関数が紹介されてた&note{hconcat-vconcat-opencvjp:[[画像処理 — OpenCV-CookBook>http://opencv.jp/cookbook/opencv_img.html#id35]], 2012-12-04閲覧};ので、そっと涙を拭いて寝ることにした&note{neru:[[@tomoaki_teshima>https://twitter.com/tomoaki_teshima/status/275948281362796544]], 2012-12-04閲覧};。
-ただ、 ある方からソースコードの提供を頂いたので、代理でこのwikiに投稿
-ただ、 [[@wk77>https://twitter.com/wk77]] さん&note{wk77-twitter:[[@wk77>https://twitter.com/wk77]], 2012-12-04閲覧};からソースコードの提供を頂いたので、代理でこのwikiに投稿

*ソースコード [#m1e11860]
-C#のソースコード
#geshi(C#,number){{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace OpenCvSharpWithWpf
{
	/// <summary>
	/// MainWindow.xaml の相互作用ロジック
	/// </summary>
	public partial class MainWindow : Window
	{
		public MainWindow()
		{
			InitializeComponent();

			// WPFのプロジェクトをつくって、ここから先をコピペすればおk
			// 普段は using OpenCvSharp; とかしてる
			// OpenCvSharp をダウンロードする。
			// http://code.google.com/p/opencvsharp/
			// Open CV にパスが通っていることを確認する。
			// .NET 4.0 の WPF のプロジェクトを作る。
			// OpenCvSharp.dll と OpenCvSharp.Extensions.dll への参照を追加する。
			// (このプロジェクトファイルでは OpenCvSharpDlls 内にファイルをコピーして、参照を追加した。)
			// ここから下のコードを追加する。
			// 普段は using OpenCvSharp; とかしてる。
			var openFileDialog = new Microsoft.Win32.OpenFileDialog();
			if (openFileDialog.ShowDialog() != true) { return; }
			OpenCvSharp.IplImage loadedIplImage;
			try { loadedIplImage = new OpenCvSharp.IplImage(openFileDialog.FileName); }
			catch { return; }

			var srcIplImage = new OpenCvSharp.IplImage(30, 30, loadedIplImage.Depth, loadedIplImage.NChannels);
			OpenCvSharp.Cv.Resize(loadedIplImage, srcIplImage);
			Func<System.Windows.Controls.Image> getImageFunc = new Func<System.Windows.Controls.Image>(() =>
			{
				var iplImage = srcIplImage.Clone();
				var bitmapSource = OpenCvSharp.Extensions.BitmapSourceConverter.ToBitmapSource(iplImage);
				var wpfImage = new System.Windows.Controls.Image() { Stretch = System.Windows.Media.Stretch.None };
				wpfImage.Source = bitmapSource;
				return wpfImage;
			});
			var horizontalStackPanel = new System.Windows.Controls.StackPanel() { Orientation = System.Windows.Controls.Orientation.Horizontal };
			var verticalStackPanel = new System.Windows.Controls.StackPanel() { Orientation = System.Windows.Controls.Orientation.Vertical };
			var uniformGrid = new System.Windows.Controls.Primitives.UniformGrid() { Rows = 2, Columns = 3 };
			var wrapPanel = new System.Windows.Controls.WrapPanel() { Width = srcIplImage.Width * 2 };
			for (int i = 0; i < 5; i++)
			{
				horizontalStackPanel.Children.Add(getImageFunc());
				verticalStackPanel.Children.Add(getImageFunc());
				uniformGrid.Children.Add(getImageFunc());
				wrapPanel.Children.Add(getImageFunc());
			}
			var windowContent = new System.Windows.Controls.Primitives.UniformGrid() { Rows = 2, Columns = 2 };
			windowContent.Children.Add(horizontalStackPanel);
			windowContent.Children.Add(verticalStackPanel);
			windowContent.Children.Add(uniformGrid);
			windowContent.Children.Add(wrapPanel);
			this.Content = windowContent;
			this.SizeToContent = System.Windows.SizeToContent.WidthAndHeight;
			// ここまでコピペ
		}
	}
}
}}

*実行結果 [#v3eab029]
#ref(Result_121204.png)

*ソースコード [#w3de6e81]
-ソースコード一式もzipでご提供頂きました!
#ref(OpenCvSharpWithWpf_121204-2344.zip)

*最後に [#z7d58585]
-正直、本当に4日目の更新は諦めていたんだけれど、ネタ&ソース提供してくれた ** さんに感謝。
-手島の担当は本来は12月3日だけで、それは[[一昨日投稿した記事>Computer Vision Advent Calendar 2012]]と[[昨日投稿した記事>Computer Vision Advent Calendar 2012 2日目]]でもう担当分は終わってるのだが、なんとなく空き枠が(ry
-手島の担当は本来は12月3日だけで、それは[[1日に投稿した記事>Computer Vision Advent Calendar 2012]]と[[一昨日投稿した記事>Computer Vision Advent Calendar 2012 2日目]]と[[昨日投稿した記事>Computer Vision Advent Calendar 2012 3日目]]でもう担当分は終わってるし、今日は涙を拭いて寝るつもりだった&note{neru};ので正直、本当に4日目の更新は諦めていたんだけれど、ネタ&ソース提供してくれた [[@wk77>https://twitter.com/wk77]] さんに感謝!
-もうネタがないので、あとは他の方々(ry
-企画者の [[@sakanazensen>https://twitter.com/sakanazensen/]]&note{twitter-sakanazensen:[[@sakanazensen>https://twitter.com/sakanazensen/]], 2012-12-01閲覧}; くんに感謝!
-企画者の [[@sakanazensen>https://twitter.com/sakanazensen/]]&note{twitter-sakanazensen:[[@sakanazensen>https://twitter.com/sakanazensen/]], 2012-12-01閲覧}; くんにも度々感謝!



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS