geometric transform

remotes/origin/master
syneffort 3 years ago
parent fad668a23c
commit dd6d82b0a9
  1. 32
      OpenCV/Form1.cs
  2. 35
      OpenCV/OpenCVClass.cs

@ -39,8 +39,36 @@ namespace OpenCV
OpenCVClass Converter = new OpenCVClass(); OpenCVClass Converter = new OpenCVClass();
pictureBoxIpl1.ImageIpl = src; 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) catch (Exception ex)
{ {

@ -15,6 +15,9 @@ namespace OpenCV
IplImage slice; IplImage slice;
IplImage symm; IplImage symm;
IplImage rotate; IplImage rotate;
IplImage affine;
IplImage perspective;
IplImage draw;
public IplImage GrayScale(IplImage src) public IplImage GrayScale(IplImage src)
{ {
@ -101,6 +104,33 @@ namespace OpenCV
return rotate; 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) private void Release(params IplImage[] images)
{ {
for (int i = 0; i < images.Length; i++) for (int i = 0; i < images.Length; i++)
@ -122,7 +152,10 @@ namespace OpenCV
resize, resize,
slice, slice,
symm, symm,
rotate rotate,
affine,
perspective,
draw
); );
} }
} }

Loading…
Cancel
Save