Member 14129828 Ответов: 1

Как я могу отслеживать последовательность изображений


Я хочу отследить 265 последовательных изображений, которые сохранились в "D:\\Resources\\Sequence"

Я получаю предупреждение, что
videoCapture
никогда не назначается и всегда будет иметь значение по умолчанию null...и когда я запускаю его, я получаю это сообщение "
"Cannot find any camera!"
- ...Я не знаю, как решить эту проблему ... не могли бы вы мне помочь ... спасибо

Я написал этот код:

Что я уже пробовал:

namespace Tracking2
{
    public partial class Form1 : Form
    {
        ImageStreamReader videoCapture;
        public Form1()
        {
            InitializeComponent();
           #if FILE_CAPTURE
            roi = new Rectangle(115, 220, 30, 15); //user defined rectangle for    sample video
            isROISelected = true;
            #endif
            initalizeHistograms(); //create histograms

            try
            {
             #if FILE_CAPTURE
                string videoDir = "D:\\Resources\\Sequence";
                videoCapture = new ImageDirectoryCapture(videoDir, "*.jpg");
             #else
                videoCapture = new CameraCapture(0);
            #endif
            }
            catch (Exception)
            {
                MessageBox.Show("Cannot find any camera!");
                return;
            }

            this.FormClosing += CamshiftDemo_FormClosing;
            Application.Idle += videoCapture_InitFrame;
            videoCapture.Open();
        }

        Bgr<byte>[,] frame = null;
        void videoCapture_InitFrame(object sender, EventArgs e)
        {
            videoCapture.ReadTo(ref frame);
            if (frame == null)
                return;

            videoCapture.Seek(-1, SeekOrigin.Current);

            if (isROISelected)
            { 
                initTracking(frame);
                Application.Idle -= videoCapture_InitFrame;
                Application.Idle += videoCapture_NewFrame;
            }
            else
            {
                frame.Draw(roi, Bgr<byte>.Blue, 3); 
            }
            this.pictureBox.Image = frame.ToBitmap(); 

            GC.Collect();
        }

        
        void videoCapture_NewFrame(object sender, EventArgs e)
        {
            videoCapture.ReadTo(ref frame);
            if (frame == null)
                return;

            if (!isROISelected)
            {
                Application.Idle += videoCapture_InitFrame;
                Application.Idle -= videoCapture_NewFrame;
                return;
            }

            long start = DateTime.Now.Ticks;

            Rectangle prevSearchArea = searchArea; 
            bool isPredicted = nonVisibleCount > 0;

            Gray<byte>[,] probabilityMap;
            Box2D foundBox;
            trackOneStep(frame, out probabilityMap, out foundBox);

            long end = DateTime.Now.Ticks;
            long elapsedMs = (end - start) / TimeSpan.TicksPerMillisecond;

            frame.Draw("Processed: " + elapsedMs + " ms", font, new Point(25, 20), Bgr<byte>.Green);
            
            this.pictureBox.Image = frame.ToBitmap(); 
            this.pbProbabilityImage.Image = probabilityMap.ToBitmap(); 
            GC.Collect();
            System.Threading.Thread.Sleep(25);
        }

F-ES Sitecore

Если код "try" в Form1() терпит неудачу и попадает в ловушку, происходит изменение, которое videoCapture останется неназначенным. Вероятно, это и есть источник предупреждения, и вы можете исправить это, добавив "videoCapture = null;" перед "return" в блоке catch.

Хотя я сомневаюсь, что это решит вашу проблему с тем, чтобы не найти камеру.

1 Ответов

Рейтинг:
1

RickZeeland

Если вы хотите работать без камеры и только с файлами, используйте это как первую строку в своем коде:

#DEFINE FILE_CAPTURE

Вам наверное тоже нужна эта линия:
ImageStreamReader videoCapture;

Также видеть: #define - Справочник по C# | Microsoft Docs[^]
И: Представляем портативный библиотека визуализации ввода-вывода для C#[^]