Exemple #1
0
 /// <summary>
 /// 基于OpenCv捕获视频流
 /// </summary>
 /// <param name="url"></param>
 /// <param name="action"></param>
 public void OpenCvCaptureVideoStream(string url, Action <OpenCvSharp.Mat> action)
 {
     using (OpenCvSharp.VideoCapture capture = new OpenCvSharp.VideoCapture(url))
     {
         //FourCC fourCC = FourCC.FromFourChars('m', 'p', '4', 'v');
         if (!capture.IsOpened())
         {
             return;
         }
         //double fps = capture.Get(VideoCaptureProperties.Fps);
         //double width = capture.Get(VideoCaptureProperties.FrameWidth);
         //double height = capture.Get(VideoCaptureProperties.FrameHeight);
         //OpenCvSharp.Size size = new OpenCvSharp.Size(width, height);
         using OpenCvSharp.Mat frame = new OpenCvSharp.Mat();
         while (_stopPlay == false)
         {
             if (capture.Read(frame))
             {
                 //win?.ShowImage(frame);
                 action?.Invoke(frame);
             }
         }
         frame.Dispose();
         capture.Dispose();
     }
 }
        public Dictionary <int, List <MarkerStructure> > GetMarkerList()
        {
            int frame_number = 0;
            int total_frame  = (int)m_data.Get(OpenCvSharp.CaptureProperty.FrameCount);

            OpenCvSharp.Mat read_image =
                new OpenCvSharp.Mat(new OpenCvSharp.Size(m_data.FrameWidth, m_data.FrameHeight), OpenCvSharp.MatType.CV_8U);
            frame_number = 0;
            if (!m_data.IsOpened())
            {
                System.Windows.Forms.MessageBox.Show("not opened");
            }
#if DEBUG1
            var window    = new OpenCvSharp.Window("debug");
            int sleepTime = (int)Math.Round(1000 / m_data.Fps);
#endif
            while (true)
            {
                //m_data.Read(read_image);
                //m_data.Grab();
                OpenCvSharp.NativeMethods.videoio_VideoCapture_operatorRightShift_Mat(m_data.CvPtr, read_image.CvPtr);
                Dictionary <int, List <MarkerStructure> > tmp = MarkerTracker(read_image, frame_number);
#if DEBUG1
                if (!read_image.Empty())
                {
                    foreach (int key in tmp.Keys)
                    {
                        foreach (MarkerStructure aa in tmp[key])
                        {
                            OpenCvSharp.Cv2.Rectangle(read_image, new OpenCvSharp.Rect(
                                                          new OpenCvSharp.Point(aa.marker_position.X, aa.marker_position.Y), new OpenCvSharp.Size(aa.marker_size.Height, aa.marker_size.Width)), new OpenCvSharp.Scalar(255.0f, 255.0f, 0.0f), 3);
                        }
                    }
                    OpenCvSharp.Cv2.PutText(read_image, frame_number.ToString(), new OpenCvSharp.Point(10, 50), OpenCvSharp.HersheyFonts.HersheyPlain, 5.0f, new OpenCvSharp.Scalar(255.0f, 255.0f, 0.0f), 3);
                    window.ShowImage(read_image);
                    OpenCvSharp.Cv2.WaitKey(sleepTime);
                }
#endif
                if (tmp != null)
                {
                    marker_result = AddDictionary(marker_result, tmp);
                }
                frame_number++;
                if (read_image.Empty())
                {
                    break;
                }
            }

            foreach (int key in marker_result.Keys)
            {
                marker_result[key].Sort();
            }

            return(marker_result);
        }
Exemple #3
0
        public MainWindow()
        {
            InitializeComponent();

            string filename;
            var    fileDlg = new OpenFileDialog();

            if (fileDlg.ShowDialog() == true)
            {
                filename = fileDlg.FileName;
            }
            else
            {
                MessageBox.Show("File is not selected!");
                return;
            }

            video = new OpenCvSharp.VideoCapture(filename);
            if (!video.IsOpened())
            {
                MessageBox.Show("Video is not valid!");
                return;
            }

            renderer = new EquirectToRect(new GLControl(), new System.Drawing.Size(1400, 900), 100 * (float)Math.PI / 180);
            renderer.Viewer.Paint += (sender, e) =>
            {
                renderer.Render(currentFrame);
                fps++;
            };
            renderer.Viewer.Dock = System.Windows.Forms.DockStyle.Fill;
            viewer.Child         = renderer.Viewer;

            DispatcherTimer renderingTimer = new DispatcherTimer();

            renderingTimer.Interval = TimeSpan.FromMilliseconds(/*1000 / video.Fps*/ 1);
            renderingTimer.Tick    += (sender, e) =>
            {
                if (DateTime.Now.Subtract(lastMeasureTime) > TimeSpan.FromSeconds(1))
                {
                    Title           = fps + " fps";
                    fps             = 0;
                    lastMeasureTime = DateTime.Now;
                }

                video.Read(currentFrame);
                if (currentFrame.Empty())
                {
                    return;
                }
                renderer.Viewer.Invalidate();
            };
            renderingTimer.Start();
        }
Exemple #4
0
        public MainWindow()
        {
            InitializeComponent();

            headset = new FVRHeadset(EFVR_ClientCapabilities.Gaze | EFVR_ClientCapabilities.Orientation);

            headset.IsHardwareConnected(out bool isConnected);
            Debug.Assert(isConnected, "Hardware is not connected!");

            headset.IsHardwareReady(out bool isReady);
            Debug.Assert(isReady, "Hardware capabilities are not ready!");

            OpenFileDialog dialog = new OpenFileDialog();

            if (dialog.ShowDialog() == true)
            {
                filename = dialog.FileName;
            }
            else
            {
                MessageBox.Show("File is not selected!");
                return;
            }

            video = new OpenCvSharp.VideoCapture(filename);
            if (!video.IsOpened())
            {
                MessageBox.Show("Video is not valid!");
                return;
            }

            video_width  = (int)video.Get(OpenCvSharp.CaptureProperty.FrameWidth);
            video_height = (int)video.Get(OpenCvSharp.CaptureProperty.FrameHeight);

            OpenCvSharp.Cv2.NamedWindow("coord", OpenCvSharp.WindowMode.Normal);
            OpenCvSharp.Cv2.ResizeWindow("coord", 1600, 900);

            renderer = new EquirectToRect(new GLControl(), new System.Drawing.Size(1400, 900), 100 * (float)Math.PI / 180);
            renderer.Viewer.Paint += (sender, e) =>
            {
                renderer.Render(currentFrame);
            };
            renderer.Viewer.Dock = System.Windows.Forms.DockStyle.Fill;
            viewer.Child         = renderer.Viewer;

            renderingTimer          = new DispatcherTimer();
            renderingTimer.Interval = TimeSpan.FromMilliseconds(1);
            renderingTimer.Tick    += (s, e) =>
            {
                video.Read(currentFrame);
                if (currentFrame.Empty())
                {
                    video.Set(OpenCvSharp.CaptureProperty.PosFrames, 0);
                    return;
                }

                headset.GetHMDPose(out SFVR_Pose pose);

                using (OpenCvSharp.Mat coordmap = currentFrame.Clone())
                {
                    SFVR_Vec3 direction = pose.orientation * SFVR_Vec3.Forward;
                    GetCoord(direction, video_width, video_height, out int x, out int y);
                    OpenCvSharp.Cv2.Circle(coordmap, new OpenCvSharp.Point(x, y), 50, new OpenCvSharp.Scalar(0, 0, 255), -1);

                    OpenCvSharp.Cv2.ImShow("coord", coordmap);
                    OpenCvSharp.Cv2.WaitKey(1);
                }

                SFVR_Vec3 eulerAngle = pose.orientation.EulerAngles;

                renderer.Pitch = -MathHelper.DegreesToRadians(eulerAngle.x);
                renderer.Yaw   = MathHelper.DegreesToRadians(eulerAngle.y);
                renderer.Roll  = MathHelper.DegreesToRadians(eulerAngle.z);

                renderer.Viewer.Invalidate();
            };
            renderingTimer.Start();
        }
Exemple #5
0
        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult res = openFileDialog1.ShowDialog();

            if (res == DialogResult.OK)
            {
                string ext = System.IO.Path.GetExtension(openFileDialog1.FileName);

                if (ext.ToLower() == ".bmp" || ext.ToLower() == ".jpg" || ext.ToLower() == ".jpeg" || ext.ToLower() == ".png")
                {
                    pictureBox1.Image = CreateImage(openFileDialog1.FileName);
                }
                if (ext.ToLower() == ".avi" || ext.ToLower() == ".mp4")
                {
                    System.IO.Directory.SetCurrentDirectory(apppath);
                    System.IO.DirectoryInfo target = new System.IO.DirectoryInfo(@"main\LR\calendar");
                    foreach (System.IO.FileInfo file in target.GetFiles())
                    {
                        file.Delete();
                    }
                    int image_num = 1;
                    video = true;
                    OpenCvSharp.VideoCapture vcap = new OpenCvSharp.VideoCapture(openFileDialog1.FileName);
                    while (vcap.IsOpened())
                    {
                        if (stopping)
                        {
                            break;
                        }

                        OpenCvSharp.Mat mat = new OpenCvSharp.Mat();

                        if (vcap.Read(mat))
                        {
                            if (pictureBox1.Image != null)
                            {
                                pictureBox1.Image.Dispose();//Memory release
                            }

                            if (mat.IsContinuous())
                            {
                                pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);

                                //OpenCvSharp.Cv2.Resize(mat, mat, OpenCvSharp.Size(), 0, 0);
                                string filename = string.Format(@"main\LR\calendar\{0:D4}.png", image_num);
                                //pictureBox1.Image.Save(filename, System.Drawing.Imaging.ImageFormat.Png);

                                OpenCvSharp.Cv2.ImWrite(filename, mat, (int[])null);
                                image_num++;
                                //if (image_num > 10) break;
                            }
                            else
                            {
                                break;
                            }
                            Application.DoEvents(); // 非推奨
                        }
                        else
                        {
                            break;
                        }
                        System.Threading.Thread.Sleep((int)(1000 / vcap.Fps));

                        mat.Dispose();//Memory release
                    }
                    Fps = vcap.Fps;
                    vcap.Dispose();//Memory release
                    stopping = false;

                    pictureBox1.Image = CreateImage(@"main\LR\calendar\0001.png");
                }
            }
        }
Exemple #6
0
        private void button1_Click(object sender, EventArgs e)
        {
            folder = "";
            DialogResult res = openFileDialog1.ShowDialog();

            if (res == DialogResult.OK)
            {
                label1.Text = "Image is loading";
                label1.Refresh();
                string ext = System.IO.Path.GetExtension(openFileDialog1.FileName);

                if (ext.ToLower() == ".bmp" || ext.ToLower() == ".jpg" || ext.ToLower() == ".jpeg" || ext.ToLower() == ".png")
                {
                    pictureBox1.Image = CreateImage(openFileDialog1.FileName);
                }
                if (ext.ToLower() == ".avi" || ext.ToLower() == ".mp4")
                {
                    System.IO.Directory.SetCurrentDirectory(apppath);
                    System.IO.DirectoryInfo target = new System.IO.DirectoryInfo(@"main\tecoGAN\LR\calendar");
                    foreach (System.IO.FileInfo file in target.GetFiles())
                    {
                        file.Delete();
                    }
                    int image_num = 1;
                    video = true;
                    OpenCvSharp.VideoCapture vcap = new OpenCvSharp.VideoCapture(openFileDialog1.FileName);
                    while (vcap.IsOpened())
                    {
                        if (stopping)
                        {
                            break;
                        }

                        OpenCvSharp.Mat mat = new OpenCvSharp.Mat();
                        if (image_num % 9 == 0)
                        {
                            label1.Text = "";
                            label1.Refresh();
                        }
                        else
                        {
                            label1.Text = "Image is loading";
                            label1.Refresh();
                        }
                        if (vcap.Read(mat))
                        {
                            if (pictureBox1.Image != null)
                            {
                                pictureBox1.Image.Dispose();//Memory release
                            }

                            if (mat.IsContinuous())
                            {
                                pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
                                {
                                    //pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;

                                    Bitmap bmp = new Bitmap(
                                        pictureBox1.Image,
                                        pictureBox1.Image.Width * 4,
                                        pictureBox1.Image.Height * 4);

                                    pictureBox1.Image = bmp;
                                }

                                if (!checkBox1.Checked)
                                {
                                    OpenCvSharp.Cv2.Resize(mat, mat, new OpenCvSharp.Size((int)((float)mat.Width * (float)numericUpDown1.Value), (int)((float)mat.Height * (float)numericUpDown1.Value)), 0, 0);
                                }
                                else
                                {
                                    OpenCvSharp.Cv2.Resize(mat, mat, new OpenCvSharp.Size((int)(0.5f + (float)mat.Width / (float)numericUpDown1.Value), (int)(0.5f + (float)mat.Height / (float)numericUpDown1.Value)), 0, 0);
                                }

                                string filename = string.Format(@"main\tecoGAN\LR\calendar\{0:D4}.png", image_num);
                                //pictureBox1.Image.Save(filename, System.Drawing.Imaging.ImageFormat.Png);

                                OpenCvSharp.Cv2.ImWrite(filename, mat, (int[])null);
                                image_num++;
                                //if (image_num > 10) break;
                            }
                            else
                            {
                                break;
                            }
                            Application.DoEvents(); // 非推奨
                        }
                        else
                        {
                            break;
                        }
                        System.Threading.Thread.Sleep((int)(1000 / vcap.Fps));

                        mat.Dispose();//Memory release
                    }
                    Fps = vcap.Fps;
                    vcap.Dispose();//Memory release
                    stopping = false;

                    pictureBox1.Image = CreateImage(@"main\tecoGAN\LR\calendar\0001.png");
                }
                label1.Text = "";
                label1.Refresh();
                MessageBox.Show("finished");
            }
        }