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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

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

Visual Studio

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

2回答

1547閲覧

C# 上で画像を射影変換したい。その2 (Windows10, Visual Studio 2019, C#, .Net 4.7)

TAKASE_Hiroyuki

総合スコア21

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

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

Visual Studio

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2020/04/24 21:53

#趣旨、背景
400 x 300 の大きさの画像があり、この画像の一部(四角形)を引き伸ばしたいと考えています。
具体的には、次の img1points で囲まれた四角形を、img2points に引き伸ばしたいと考えています。

C#

1Point[] img1points = 2{ new Point(95, 95), new Point(360, 32), new Point(300, 240), new Point(50,200) } 3Point[] img2points = 4{ new Point(0,0), new Point(399,0), new Point(399,299), new Point(0,299) }

本件は、次の質問の続きです。
C# 上で画像を射影変換したい。(Windows10, Visual Studio 2019, C#, .Net 4.7)

#やったこと
Visual Studio 2019 上で、NuGet を用いて、OpenCVSharp をインストールしました。

NuGetでOpenCVSharp

#ソースコード
次のように記述しました。コンパイルエラーはありません。

C#

1using OpenCvSharp; 2using System.Drawing; 3using System.Windows.Forms; 4 5namespace test20 6{ 7 public partial class Form1 : Form 8 { 9 public Form1() 10 { 11 InitializeComponent(); 12 13 Image img = global::test20.Properties.Resources._400x300; 14 15 CvPoint2D32f[] src_pnt = new CvPoint2D32f[4]; 16 CvPoint2D32f[] dst_pnt = new CvPoint2D32f[4]; 17 IplImage src_img = null; 18 IplImage dst_img = null; 19 CvMat map_matrix = null; 20 21 Bitmap bmp = (Bitmap)img; 22 src_img = BitmapConverter.ToIplImage(bmp); 23 dst_img = Cv.CloneImage(src_img); 24 25 // (2)四角形の変換前と変換後の対応する頂点をそれぞれセットし 26 src_pnt[0] = new CvPoint2D32f(src_img.Width - 1, 0); 27 src_pnt[1] = new CvPoint2D32f(src_img.Width - 1, src_img.Height - 1); 28 src_pnt[2] = new CvPoint2D32f(0, src_img.Height - 1); 29 src_pnt[3] = new CvPoint2D32f(0, 0); 30 31 dst_pnt[0] = new CvPoint2D32f(95,95); 32 dst_pnt[1] = new CvPoint2D32f(360,32); 33 dst_pnt[2] = new CvPoint2D32f(300,240); 34 dst_pnt[3] = new CvPoint2D32f(50,200); 35 36 map_matrix = Cv.GetPerspectiveTransform(src_pnt, dst_pnt); 37 38 // (3)指定された透視投影変換行列により,cvWarpPerspectiveを用いて画像を変換させる 39 Cv.WarpPerspective(src_img, dst_img, map_matrix, 40 Interpolation.Linear | Interpolation.FillOutliers, Cv.ScalarAll(100)); 41 42 // (4)結果を表示する 43 PictureBox p2 = new PictureBox(); 44 p2.Image = dst_img.ToBitmap(); 45 p2.Location = new System.Drawing.Point(375, 125); 46 p2.Size = new System.Drawing.Size(400, 300); 47 this.Controls.Add(p2); 48 49 } 50 } 51}

#ランタイムエラー
実行すると、次のようなランタイムエラーが出ます。
エラーメッセージ その1
エラーメッセージ その2

#エラーを回避するためにやったこと
DLLが無いみたいなので、次の記事を参考にして、OpenCV の dll を入手しました。
OpenCV 4.3.0をVisual Studio 2019から使用する時の手順

具体的には、次のベージから
OpenCV 4.3.0

opencv-4.3.0-vc14_vc15.exe を入手し、
opencv-4.3.0-vc14_vc15.exe

展開して、dll をすべてコピーしました。コピーした後のフォルダの様子は、次のとおりです。
コピー後の様子

#お願い

いくつか疑問がありますので、御回答いただければ幸いです。

  1. OpenCV の DLL の入手方法は、これで正しいでしょうか。
  2. DLL をコピーする(またはインストールする)方法は、これで正しいでしょうか。
  3. C# のソースコードの内容に間違いはありませんでしょうか。
  4. NuGet を用いて OpenCVSharp をインストールしたのは妥当でしょうか。
  5. その他、正しく実行するために必要なことはありませんでしょうか。

よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

イメージ説明
こちらのOpenCV2のものを使用して、提示ソースの動作を確認しました。

投稿2020/04/25 06:52

YAmaGNZ

総合スコア10222

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

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

guest

0

古いOpenCvSharpを使用しているようですね。
まずは下記画像のOpenCvSharp4をNuGetからインストールしてみてはいかがでしょうか。
OpenCvSharp4
shimat / opencvsharp

投稿2020/04/25 01:07

takapi_cs

総合スコア349

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

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

YAmaGNZ

2020/04/25 06:48

OpenCV4ですとBitmapConverter.ToIplImageがないので、ソースの修正が必要になります。
TAKASE_Hiroyuki

2020/04/25 07:03

ありがとうございます。 BitmapConverter.ToIplImage にかわる関数を探してみようと思います。
YAmaGNZ

2020/04/25 08:34

次の質問の回答にも書きましたが、OpenCV4ではIplImageは廃止になってMatを使用するようになっています。 この為、Matに変換する必要があります。
TAKASE_Hiroyuki

2020/04/25 08:45

ありがとうございます。Mat ですね。調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問