static void Main(string[] args) { MCvPoint3D32f[] _points; Mat _left = CvInvoke.Imread("imL.png", ImreadModes.Color); Mat _right = CvInvoke.Imread("imR.png", ImreadModes.Color); Mat disparityMap = new Mat(); Stopwatch watch = Stopwatch.StartNew(); UMat leftGray = new UMat(); UMat rightGray = new UMat(); CvInvoke.CvtColor(_left, leftGray, ColorConversion.Bgr2Gray); CvInvoke.CvtColor(_right, rightGray, ColorConversion.Bgr2Gray); Mat points = new Mat(); Computer3DPointsFromStereoPair(leftGray, rightGray, disparityMap, points); watch.Stop(); long disparityComputationTime = watch.ElapsedMilliseconds; Mat pointsArray = points.Reshape(points.NumberOfChannels, points.Rows * points.Cols); Mat colorArray = _left.Reshape(_left.NumberOfChannels, _left.Rows * _left.Cols); Mat colorArrayFloat = new Mat(); colorArray.ConvertTo(colorArrayFloat, DepthType.Cv32F); WCloud cloud = new WCloud(pointsArray, colorArray); Emgu.CV.Viz3d v = new Emgu.CV.Viz3d("Simple stereo reconstruction"); WText wtext = new WText("3d point cloud", new System.Drawing.Point(20, 20), 20, new MCvScalar(255, 255, 255)); WCoordinateSystem wCoordinate = new WCoordinateSystem(1.0); v.ShowWidget("text", wtext); //v.ShowWidget("coordinate", wCoordinate); v.ShowWidget("cloud", cloud); v.Spin(); }
public static Viz3d GetViz3d(Mat left, Mat right) { Mat disparityMap = new Mat(); Stopwatch watch = Stopwatch.StartNew(); UMat leftGray = new UMat(); UMat rightGray = new UMat(); CvInvoke.CvtColor(left, leftGray, ColorConversion.Bgr2Gray); CvInvoke.CvtColor(right, rightGray, ColorConversion.Bgr2Gray); Mat points = new Mat(); Computer3DPointsFromStereoPair(leftGray, rightGray, disparityMap, points); watch.Stop(); long disparityComputationTime = watch.ElapsedMilliseconds; Mat pointsArray = points.Reshape(points.NumberOfChannels, points.Rows * points.Cols); Mat colorArray = left.Reshape(left.NumberOfChannels, left.Rows * left.Cols); Mat colorArrayFloat = new Mat(); colorArray.ConvertTo(colorArrayFloat, DepthType.Cv32F); WCloud cloud = new WCloud(pointsArray, colorArray); Emgu.CV.Viz3d v = new Emgu.CV.Viz3d("Simple stereo reconstruction"); WText wtext = new WText("3d point cloud", new System.Drawing.Point(20, 20), 20, new MCvScalar(255, 255, 255)); WCoordinateSystem wCoordinate = new WCoordinateSystem(1.0); v.ShowWidget("text", wtext); //v.ShowWidget("coordinate", wCoordinate); v.ShowWidget("cloud", cloud); return(v); }
static void Main(string[] args) { MCvPoint3D32f[] _points; Mat _left = CvInvoke.Imread("imL.png", ImreadModes.Color); Mat _right = CvInvoke.Imread("imR.png", ImreadModes.Color); Mat disparityMap = new Mat(); Stopwatch watch = Stopwatch.StartNew(); UMat leftGray = new UMat(); UMat rightGray = new UMat(); CvInvoke.CvtColor(_left, leftGray, ColorConversion.Bgr2Gray); CvInvoke.CvtColor(_right, rightGray, ColorConversion.Bgr2Gray); Mat points = new Mat(); Computer3DPointsFromStereoPair(leftGray, rightGray, disparityMap, points); watch.Stop(); long disparityComputationTime = watch.ElapsedMilliseconds; Mat pointsArray = points.Reshape(points.NumberOfChannels, points.Rows*points.Cols); Mat colorArray = _left.Reshape(_left.NumberOfChannels, _left.Rows*_left.Cols); Mat colorArrayFloat = new Mat(); colorArray.ConvertTo(colorArrayFloat, DepthType.Cv32F); WCloud cloud = new WCloud(pointsArray, colorArray); Emgu.CV.Viz3d v = new Emgu.CV.Viz3d("Simple stereo reconstruction"); WText wtext = new WText("3d point cloud", new System.Drawing.Point(20, 20), 20, new MCvScalar(255, 255, 255)); WCoordinateSystem wCoordinate = new WCoordinateSystem(1.0); v.ShowWidget("text", wtext); //v.ShowWidget("coordinate", wCoordinate); v.ShowWidget("cloud", cloud); v.Spin(); }
public static Viz3d GetViz3d(Mat pointMat, Mat colorMat) { WCloud cloud = new WCloud(pointMat, colorMat); Emgu.CV.Viz3d v = new Emgu.CV.Viz3d("Simple stereo reconstruction"); WText wtext = new WText("3d point cloud", new System.Drawing.Point(20, 20), 20, new MCvScalar(255, 255, 255)); WCoordinateSystem wCoordinate = new WCoordinateSystem(1.0); v.ShowWidget("text", wtext); //v.ShowWidget("coordinate", wCoordinate); v.ShowWidget("cloud", cloud); return(v); }
static void Main(string[] args) { MCvPoint3D32f[] _points; Mat _left = CvInvoke.Imread("imL.png", ImreadModes.Color); Mat _right = CvInvoke.Imread("imR.png", ImreadModes.Color); Mat disparityMap = new Mat(); Stopwatch watch = Stopwatch.StartNew(); UMat leftGray = new UMat(); UMat rightGray = new UMat(); CvInvoke.CvtColor(_left, leftGray, ColorConversion.Bgr2Gray); CvInvoke.CvtColor(_right, rightGray, ColorConversion.Bgr2Gray); Mat points = new Mat(); Computer3DPointsFromStereoPair(leftGray, rightGray, disparityMap, points); watch.Stop(); long disparityComputationTime = watch.ElapsedMilliseconds; Mat pointsArray = points.Reshape(points.NumberOfChannels, points.Rows * points.Cols); Mat colorArray = _left.Reshape(_left.NumberOfChannels, _left.Rows * _left.Cols); Mat colorArrayFloat = new Mat(); colorArray.ConvertTo(colorArrayFloat, DepthType.Cv32F); WCloud cloud = new WCloud(pointsArray, colorArray); // My attempt to grab a pixel. Image <Bgr, Byte> image = disparityMap.ToImage <Bgr, Byte>(); int threshhold = 190; bool objectFound = false; for (int i = 0; i < image.Rows; i++) { for (int j = 0; j < disparityMap.Cols; j++) { // If it's below the threshhold black it out. if (image.Data[i, j, 0] < threshhold) { image.Data[i, j, 2] = 0; image.Data[i, j, 1] = 0; image.Data[i, j, 0] = 0; } else { objectFound = true; Console.Write("(" + image.Data[i, j, 0].ToString().PadLeft(3, '0') + ","); // Blue; Console.Write(image.Data[i, j, 1].ToString().PadLeft(3, '0') + ","); // Green; Console.Write(image.Data[i, j, 2].ToString().PadLeft(3, '0') + ")"); // Red; } } Console.WriteLine(); // new row end line; } // 2D Disparity Display Mat show = new Mat(); disparityMap.ConvertTo(show, DepthType.Cv8U); CvInvoke.Imshow("Disparity", show); disparityMap.ConvertTo(show, DepthType.Cv8U); CvInvoke.Imshow("Disparity Restricted", image); //try //{ // if (objectFound) // { // SerialPort serialPort1 = new SerialPort("COM6", 9600); // serialPort1.Open(); // serialPort1.WriteLine(""); // System.Threading.Thread.Sleep(1000); // serialPort1.WriteLine(""); // serialPort1.Close(); // } //} //catch (Exception ex) //{ //} // 3D IMAGE DISPLAY Emgu.CV.Viz3d v = new Emgu.CV.Viz3d("Simple stereo reconstruction"); WText wtext = new WText("3d point cloud", new System.Drawing.Point(20, 20), 20, new MCvScalar(255, 255, 255)); WCoordinateSystem wCoordinate = new WCoordinateSystem(1.0); v.ShowWidget("text", wtext); //v.ShowWidget("coordinate", wCoordinate); v.ShowWidget("cloud", cloud); v.Spin(); CvInvoke.WaitKey(0); }