diff --git a/OpenCV/Form1.cs b/OpenCV/Form1.cs index 556fc94..7559b75 100644 --- a/OpenCV/Form1.cs +++ b/OpenCV/Form1.cs @@ -39,8 +39,36 @@ namespace OpenCV OpenCVClass Converter = new OpenCVClass(); pictureBoxIpl1.ImageIpl = src; - //pictureBoxIpl2.ImageIpl = Converter.Symmetry(src, FlipMode.XY); - pictureBoxIpl2.ImageIpl = Converter.Rotate(src, -45); + + //CvPoint2D32f[] srcPoints = new CvPoint2D32f[] + //{ + // new CvPoint2D32f(100.0, 100.0), + // new CvPoint2D32f(src.Width - 100.0, 100.0), + // new CvPoint2D32f(100.0, src.Height - 100.0) + //}; + //CvPoint2D32f[] dstPoints = new CvPoint2D32f[] + //{ + // new CvPoint2D32f(300.0, 100.0), + // new CvPoint2D32f(src.Width - 100.0, 100.0), + // new CvPoint2D32f(100.0, src.Height - 100.0) + //}; + //pictureBoxIpl2.ImageIpl = Converter.AffineImage(src, srcPoints, dstPoints); + + CvPoint2D32f[] srcPoints = new CvPoint2D32f[] + { + new CvPoint2D32f(600.0, 600.0), + new CvPoint2D32f(300.0, 900.0), + new CvPoint2D32f(1300.0, 600.0), + new CvPoint2D32f(1600.0, 900.0) + }; + CvPoint2D32f[] dstPoints = new CvPoint2D32f[] + { + new CvPoint2D32f(0.0, 0.0), + new CvPoint2D32f(0.0, src.Height), + new CvPoint2D32f(src.Width, 0.0), + new CvPoint2D32f(src.Width, src.Height) + }; + pictureBoxIpl2.ImageIpl = Converter.PerspectiveImage(src, srcPoints, dstPoints); } catch (Exception ex) { diff --git a/OpenCV/OpenCVClass.cs b/OpenCV/OpenCVClass.cs index 05fab60..6bb1264 100644 --- a/OpenCV/OpenCVClass.cs +++ b/OpenCV/OpenCVClass.cs @@ -15,6 +15,9 @@ namespace OpenCV IplImage slice; IplImage symm; IplImage rotate; + IplImage affine; + IplImage perspective; + IplImage draw; public IplImage GrayScale(IplImage src) { @@ -101,6 +104,33 @@ namespace OpenCV return rotate; } + public IplImage AffineImage(IplImage src, CvPoint2D32f[] srcPoints, CvPoint2D32f[] dstPoints) + { + if (srcPoints.Length != 3 || dstPoints.Length != 3) + return null; + + affine = new IplImage(src.Size, BitDepth.U8, 3); + CvMat matrix = Cv.GetAffineTransform(srcPoints, dstPoints); + Cv.WarpAffine(src, affine, matrix, Interpolation.Linear, CvScalar.RealScalar(0)); + return affine; + } + + public IplImage PerspectiveImage(IplImage src, CvPoint2D32f[] srcPoints, CvPoint2D32f[] dstPoints) + { + if (srcPoints.Length != 4 || dstPoints.Length != 4) + return null; + + perspective = new IplImage(src.Size, BitDepth.U8, 3); + CvMat matrix = Cv.GetPerspectiveTransform(srcPoints, dstPoints); + Cv.WarpPerspective(src, perspective, matrix, Interpolation.Linear, CvScalar.RealScalar(0)); + return perspective; + } + + public IplImage DrawImage() + { + draw = new IplImage(new CvSize(640, 480), BitDepth.U8, 3); + } + private void Release(params IplImage[] images) { for (int i = 0; i < images.Length; i++) @@ -122,7 +152,10 @@ namespace OpenCV resize, slice, symm, - rotate + rotate, + affine, + perspective, + draw ); } }