Skip to content

Commit

Permalink
Merge pull request #671 from shimat/try_unmanaged_generic_type
Browse files Browse the repository at this point in the history
try where T : unmanaged
  • Loading branch information
shimat authored Jun 20, 2019
2 parents cd69c93 + d5b38f8 commit 618d2ec
Show file tree
Hide file tree
Showing 39 changed files with 852 additions and 13,440 deletions.
30 changes: 15 additions & 15 deletions src/OpenCvSharp.Extensions/Binarizer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ public static void Niblack(Mat src, Mat dst, int kernelSize, double k)
Cv2.CopyMakeBorder(src, tempMat, borderSize, borderSize, borderSize, borderSize, BorderTypes.Replicate, Scalar.All(0));
Cv2.Integral(tempMat, sumMat, sqSumMat, MatType.CV_64FC1);

using (var tSrcMat = new MatOfByte(src))
using (var tDstMat = new MatOfByte(dst))
using (var tSumMat = new MatOfDouble(sumMat))
using (var tSqSumMat = new MatOfDouble(sqSumMat))
using (var tSrcMat = new Mat<byte>(src))
using (var tDstMat = new Mat<byte>(dst))
using (var tSumMat = new Mat<double>(sumMat))
using (var tSqSumMat = new Mat<double>(sqSumMat))
{
var tSrc = tSrcMat.GetIndexer();
var tDst = tDstMat.GetIndexer();
Expand Down Expand Up @@ -149,10 +149,10 @@ public static void Sauvola(Mat src, Mat dst, int kernelSize, double k, double r)
Cv2.CopyMakeBorder(src, tempMat, borderSize, borderSize, borderSize, borderSize, BorderTypes.Replicate, Scalar.All(0));
Cv2.Integral(tempMat, sumMat, sqSumMat, MatType.CV_64FC1);

using (var tSrcMat = new MatOfByte(src))
using (var tDstMat = new MatOfByte(dst))
using (var tSumMat = new MatOfDouble(sumMat))
using (var tSqSumMat = new MatOfDouble(sqSumMat))
using (var tSrcMat = new Mat<byte>(src))
using (var tDstMat = new Mat<byte>(dst))
using (var tSumMat = new Mat<double>(sumMat))
using (var tSqSumMat = new Mat<double>(sqSumMat))
{
var tSrc = tSrcMat.GetIndexer();
var tDst = tDstMat.GetIndexer();
Expand Down Expand Up @@ -229,8 +229,8 @@ public static void Bernsen(Mat src, Mat dst, int kernelSize, byte constrastMin,
int height = src.Height;
dst.Create(src.Size(), src.Type());

using (var tSrcMat = new MatOfByte(src))
using (var tDstMat = new MatOfByte(dst))
using (var tSrcMat = new Mat<byte>(src))
using (var tDstMat = new Mat<byte>(dst))
{
var tSrc = tSrcMat.GetIndexer();
var tDst = tDstMat.GetIndexer();
Expand Down Expand Up @@ -305,10 +305,10 @@ public static void Nick(Mat src, Mat dst, int kernelSize, double k)
Cv2.CopyMakeBorder(src, tempMat, borderSize, borderSize, borderSize, borderSize, BorderTypes.Replicate, Scalar.All(0));
Cv2.Integral(tempMat, sumMat, sqSumMat, MatType.CV_64FC1);

using (var tSrcMat = new MatOfByte(src))
using (var tDstMat = new MatOfByte(dst))
using (var tSumMat = new MatOfDouble(sumMat))
using (var tSqSumMat = new MatOfDouble(sqSumMat))
using (var tSrcMat = new Mat<byte>(src))
using (var tDstMat = new Mat<byte>(dst))
using (var tSumMat = new Mat<double>(sumMat))
using (var tSqSumMat = new Mat<double>(sqSumMat))
{
var tSrc = tSrcMat.GetIndexer();
var tDst = tDstMat.GetIndexer();
Expand Down Expand Up @@ -363,7 +363,7 @@ private static void MinMax(Mat img, int x, int y, int size, out byte min, out by
int ys = Math.Max(y - size2, 0);
int ye = Math.Min(y + size2, img.Height);

using (var tImg = new MatOfByte(img))
using (var tImg = new Mat<byte>(img))
{
var indexer = tImg.GetIndexer();

Expand Down
58 changes: 29 additions & 29 deletions src/OpenCvSharp/Cv2/Cv2_calib3d.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ public static void Rodrigues(double[] vector, out double[,] matrix, out double[,
throw new ArgumentException("vector.Length != 3");

using (var vectorM = new Mat(3, 1, MatType.CV_64FC1, vector))
using (var matrixM = new MatOfDouble())
using (var jacobianM = new MatOfDouble())
using (var matrixM = new Mat<double>())
using (var jacobianM = new Mat<double>())
{
NativeMethods.calib3d_Rodrigues_VecToMat(vectorM.CvPtr, matrixM.CvPtr, jacobianM.CvPtr);
matrix = matrixM.ToRectangularArray();
Expand Down Expand Up @@ -80,8 +80,8 @@ public static void Rodrigues(double[,] matrix, out double[] vector, out double[,
throw new ArgumentException("matrix must be double[3,3]");

using (var matrixM = new Mat(3, 3, MatType.CV_64FC1, matrix))
using (var vectorM = new MatOfDouble())
using (var jacobianM = new MatOfDouble())
using (var vectorM = new Mat<double>())
using (var jacobianM = new Mat<double>())
{
NativeMethods.calib3d_Rodrigues_MatToVec(matrixM.CvPtr, vectorM.CvPtr, jacobianM.CvPtr);
vector = vectorM.ToArray();
Expand Down Expand Up @@ -222,11 +222,11 @@ public static Vec3d RQDecomp3x3(double[,] src, out double[,] mtxR, out double[,]
throw new ArgumentException("src must be double[3,3]");

using (var srcM = new Mat(3, 3, MatType.CV_64FC1, src))
using (var mtxRM = new MatOfDouble())
using (var mtxQM = new MatOfDouble())
using (var qxM = new MatOfDouble())
using (var qyM = new MatOfDouble())
using (var qzM = new MatOfDouble())
using (var mtxRM = new Mat<double>())
using (var mtxQM = new Mat<double>())
using (var qxM = new Mat<double>())
using (var qyM = new Mat<double>())
using (var qzM = new Mat<double>())
{
NativeMethods.calib3d_RQDecomp3x3_Mat(srcM.CvPtr,
mtxRM.CvPtr, mtxQM.CvPtr, qxM.CvPtr, qyM.CvPtr, qzM.CvPtr,
Expand Down Expand Up @@ -321,13 +321,13 @@ public static void DecomposeProjectionMatrix(double[,] projMatrix,
throw new ArgumentException("projMatrix must be double[3,4] or double[4,3]");

using (var projMatrixM = new Mat(3, 4, MatType.CV_64FC1, projMatrix))
using (var cameraMatrixM = new MatOfDouble())
using (var rotMatrixM = new MatOfDouble())
using (var transVectM = new MatOfDouble())
using (var rotMatrixXM = new MatOfDouble())
using (var rotMatrixYM = new MatOfDouble())
using (var rotMatrixZM = new MatOfDouble())
using (var eulerAnglesM = new MatOfDouble())
using (var cameraMatrixM = new Mat<double>())
using (var rotMatrixM = new Mat<double>())
using (var transVectM = new Mat<double>())
using (var rotMatrixXM = new Mat<double>())
using (var rotMatrixYM = new Mat<double>())
using (var rotMatrixZM = new Mat<double>())
using (var eulerAnglesM = new Mat<double>())
{
NativeMethods.calib3d_decomposeProjectionMatrix_Mat(
projMatrixM.CvPtr,
Expand Down Expand Up @@ -490,16 +490,16 @@ public static void ComposeRT(double[] rvec1, double[] tvec1,
using (var tvec1M = new Mat(3, 1, MatType.CV_64FC1, tvec1))
using (var rvec2M = new Mat(3, 1, MatType.CV_64FC1, rvec2))
using (var tvec2M = new Mat(3, 1, MatType.CV_64FC1, tvec2))
using (var rvec3M = new MatOfDouble())
using (var tvec3M = new MatOfDouble())
using (var dr3dr1M = new MatOfDouble())
using (var dr3dt1M = new MatOfDouble())
using (var dr3dr2M = new MatOfDouble())
using (var dr3dt2M = new MatOfDouble())
using (var dt3dr1M = new MatOfDouble())
using (var dt3dt1M = new MatOfDouble())
using (var dt3dr2M = new MatOfDouble())
using (var dt3dt2M = new MatOfDouble())
using (var rvec3M = new Mat<double>())
using (var tvec3M = new Mat<double>())
using (var dr3dr1M = new Mat<double>())
using (var dr3dt1M = new Mat<double>())
using (var dr3dr2M = new Mat<double>())
using (var dr3dt2M = new Mat<double>())
using (var dt3dr1M = new Mat<double>())
using (var dt3dt1M = new Mat<double>())
using (var dt3dr2M = new Mat<double>())
using (var dt3dt2M = new Mat<double>())
{
NativeMethods.calib3d_composeRT_Mat(rvec1M.CvPtr, tvec1M.CvPtr, rvec2M.CvPtr, tvec2M.CvPtr,
rvec3M.CvPtr, tvec3M.CvPtr,
Expand Down Expand Up @@ -651,8 +651,8 @@ public static void ProjectPoints(IEnumerable<Point3f> objectPoints,
using (var tvecM = new Mat(3, 1, MatType.CV_64FC1, tvec))
using (var cameraMatrixM = new Mat(3, 3, MatType.CV_64FC1, cameraMatrix))
using (var distCoeffsM = (distCoeffs == null) ? new Mat() : new Mat(distCoeffs.Length, 1, MatType.CV_64FC1, distCoeffs))
using (var imagePointsM = new MatOfPoint2f())
using (var jacobianM = new MatOfDouble())
using (var imagePointsM = new Mat<Point2f>())
using (var jacobianM = new Mat<double>())
{
NativeMethods.calib3d_projectPoints_Mat(objectPointsM.CvPtr,
rvecM.CvPtr, tvecM.CvPtr, cameraMatrixM.CvPtr, distCoeffsM.CvPtr,
Expand Down Expand Up @@ -2230,7 +2230,7 @@ public static Mat GetOptimalNewCameraMatrix(InputArray cameraMatrix, InputArray
if (matPtr == IntPtr.Zero)
return null;

using (var mat = new MatOfDouble(matPtr))
using (var mat = new Mat<double>(matPtr))
{
return mat.ToRectangularArray();
}
Expand Down
16 changes: 8 additions & 8 deletions src/OpenCvSharp/Cv2/Cv2_core.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2248,8 +2248,8 @@ public static Point2f[] PerspectiveTransform(IEnumerable<Point2f> src, Mat m)
if (m == null)
throw new ArgumentNullException(nameof(m));

using (var srcMat = MatOfPoint2f.FromArray(src))
using (var dstMat = new MatOfPoint2f())
using (var srcMat = Mat<Point2f>.FromArray(src))
using (var dstMat = new Mat<Point2f>())
{
NativeMethods.core_perspectiveTransform_Mat(srcMat.CvPtr, dstMat.CvPtr, m.CvPtr);
GC.KeepAlive(m);
Expand All @@ -2271,8 +2271,8 @@ public static Point2d[] PerspectiveTransform(IEnumerable<Point2d> src, Mat m)
if (m == null)
throw new ArgumentNullException(nameof(m));

using (var srcMat = MatOfPoint2d.FromArray(src))
using (var dstMat = new MatOfPoint2d())
using (var srcMat = Mat<Point2d>.FromArray(src))
using (var dstMat = new Mat<Point2d>())
{
NativeMethods.core_perspectiveTransform_Mat(srcMat.CvPtr, dstMat.CvPtr, m.CvPtr);
GC.KeepAlive(m);
Expand All @@ -2294,8 +2294,8 @@ public static Point3f[] PerspectiveTransform(IEnumerable<Point3f> src, Mat m)
if (m == null)
throw new ArgumentNullException(nameof(m));

using (var srcMat = MatOfPoint3f.FromArray(src))
using (var dstMat = new MatOfPoint3f())
using (var srcMat = Mat<Point3f>.FromArray(src))
using (var dstMat = new Mat<Point3f>())
{
NativeMethods.core_perspectiveTransform_Mat(srcMat.CvPtr, dstMat.CvPtr, m.CvPtr);
GC.KeepAlive(m);
Expand All @@ -2317,8 +2317,8 @@ public static Point3d[] PerspectiveTransform(IEnumerable<Point3d> src, Mat m)
if (m == null)
throw new ArgumentNullException(nameof(m));

using (var srcMat = MatOfPoint3d.FromArray(src))
using (var dstMat = new MatOfPoint3d())
using (var srcMat = Mat<Point3d>.FromArray(src))
using (var dstMat = new Mat<Point3d>())
{
NativeMethods.core_perspectiveTransform_Mat(srcMat.CvPtr, dstMat.CvPtr, m.CvPtr);
GC.KeepAlive(m);
Expand Down
14 changes: 8 additions & 6 deletions src/OpenCvSharp/Cv2/Cv2_imgproc.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2431,7 +2431,7 @@ public static int ConnectedComponents(InputArray image, OutputArray labels,
/// <returns>The number of labels</returns>
public static int ConnectedComponents(InputArray image, out int[,] labels, PixelConnectivity connectivity)
{
using (var labelsMat = new MatOfInt())
using (var labelsMat = new Mat<int>())
{
int result = ConnectedComponents(image, labelsMat, connectivity, MatType.CV_32S);
labels = labelsMat.ToRectangularArray();
Expand Down Expand Up @@ -2531,9 +2531,9 @@ public static int ConnectedComponentsWithStats(
public static ConnectedComponents ConnectedComponentsEx(
InputArray image, PixelConnectivity connectivity = PixelConnectivity.Connectivity8)
{
using (var labelsMat = new MatOfInt())
using (var statsMat = new MatOfInt())
using (var centroidsMat = new MatOfDouble())
using (var labelsMat = new Mat<int>())
using (var statsMat = new Mat<int>())
using (var centroidsMat = new Mat<double>())
{
int nLabels = ConnectedComponentsWithStats(
image, labelsMat, statsMat, centroidsMat, connectivity, MatType.CV_32S);
Expand Down Expand Up @@ -2711,6 +2711,7 @@ public static Point[][] FindContoursAsArray(InputOutputArray image,
return contoursVec.ToArray();
}
}

#if LANG_JP
/// <summary>
/// 2値画像中の輪郭を検出します.
Expand All @@ -2734,7 +2735,7 @@ public static Point[][] FindContoursAsArray(InputOutputArray image,
/// This is useful if the contours are extracted from the image ROI and then they should be analyzed in the whole image context.</param>
/// <returns>Detected contours. Each contour is stored as a vector of points.</returns>
#endif
public static MatOfPoint[] FindContoursAsMat(InputOutputArray image,
public static Mat<Point>[] FindContoursAsMat(InputOutputArray image,
RetrievalModes mode, ContourApproximationModes method, Point? offset = null)
{
if (image == null)
Expand All @@ -2749,9 +2750,10 @@ public static MatOfPoint[] FindContoursAsMat(InputOutputArray image,

using (var contoursVec = new VectorOfMat(contoursPtr))
{
return contoursVec.ToArray<MatOfPoint>();
return contoursVec.ToArray<Mat<Point>>();
}
}

#endregion
#region ApproxPolyDP

Expand Down
Loading

0 comments on commit 618d2ec

Please sign in to comment.