#趣旨、背景
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 をインストールしました。
#ソースコード
次のように記述しました。コンパイルエラーはありません。
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}
#ランタイムエラー
実行すると、次のようなランタイムエラーが出ます。
#エラーを回避するためにやったこと
DLLが無いみたいなので、次の記事を参考にして、OpenCV の dll を入手しました。
OpenCV 4.3.0をVisual Studio 2019から使用する時の手順
具体的には、次のベージから
OpenCV 4.3.0
opencv-4.3.0-vc14_vc15.exe を入手し、
展開して、dll をすべてコピーしました。コピーした後のフォルダの様子は、次のとおりです。
#お願い
いくつか疑問がありますので、御回答いただければ幸いです。
- OpenCV の DLL の入手方法は、これで正しいでしょうか。
- DLL をコピーする(またはインストールする)方法は、これで正しいでしょうか。
- C# のソースコードの内容に間違いはありませんでしょうか。
- NuGet を用いて OpenCVSharp をインストールしたのは妥当でしょうか。
- その他、正しく実行するために必要なことはありませんでしょうか。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/25 07:01