Rumah > Peranti teknologi > AI > Masalah penentukuran sasaran dalam penjejakan berbilang objek

Masalah penentukuran sasaran dalam penjejakan berbilang objek

WBOY
Lepaskan: 2023-10-08 14:41:11
asal
914 orang telah melayarinya

Masalah penentukuran sasaran dalam penjejakan berbilang objek

Masalah penentukuran sasaran dalam penjejakan berbilang objek memerlukan contoh kod khusus

Penentukuran sasaran ialah isu teras dalam penjejakan berbilang objek. Dalam tugas penjejakan berbilang objek, kita selalunya perlu menentukur sasaran dengan tepat untuk dijejaki daripada bingkai video berturut-turut untuk memberikan kedudukan awal yang tepat untuk operasi penjejakan sasaran seterusnya.

Terdapat banyak kaedah pelaksanaan khusus untuk penentukuran sasaran Di bawah saya akan memperkenalkan kaedah penentukuran sasaran mudah berdasarkan perpustakaan OpenCV dan memberikan contoh kod yang sepadan.

Pertama sekali, kita perlu mendapatkan imej setiap bingkai melalui peranti tangkapan video. Dalam pustaka OpenCV, anda boleh menggunakan kelas VideoCapture untuk mendapatkan bingkai video. Berikut adalah contoh kod untuk mendapatkan bingkai video:

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    // 打开视频文件
    VideoCapture capture("video.mp4");
    Mat frame;
    
    // 读取视频帧并显示
    while (capture.read(frame))
    {
        imshow("Video", frame);
        
        if (waitKey(30) == 27)
        {
            break;
        }
    }
    
    // 释放视频捕捉设备
    capture.release();
    destroyAllWindows();
    
    return 0;
}
Salin selepas log masuk

Seterusnya, kita perlu memilih kedudukan awal sasaran daripada bingkai video. Kaedah mudah ialah membenarkan pengguna menggunakan tetikus untuk membingkai kawasan sasaran pada imej, dan kemudian mendapatkan koordinat kawasan berbingkai. Berikut ialah contoh kod yang menggunakan acara tetikus OpenCV untuk melaksanakan pemilihan bingkai sasaran:

bool isDragging = false;
Rect rect;
Point startPoint;

// 鼠标事件回调函数
void onMouseEvent(int event, int x, int y, int flags, void* userdata)
{
    if (event == EVENT_LBUTTONDOWN)
    {
        isDragging = true;
        startPoint = Point(x, y);
    }
    else if (event == EVENT_LBUTTONUP)
    {
        isDragging = false;
        rect = Rect(startPoint, Point(x, y));
        
        // 在图像上绘制矩形框
        Mat& image = *(Mat*)userdata;
        rectangle(image, rect, Scalar(0, 255, 0), 2);
        imshow("Video", image);
    }
    else if (event == EVENT_MOUSEMOVE && isDragging)
    {
        // 在图像上实时绘制矩形框
        Mat& image = *(Mat*)userdata;
        Mat temp = image.clone();
        rectangle(temp, startPoint, Point(x, y), Scalar(0, 255, 0), 2);
        imshow("Video", temp);
    }
}

int main()
{
    // 打开视频文件
    VideoCapture capture("video.mp4");
    Mat frame;
    
    // 创建窗口并注册鼠标事件回调函数
    namedWindow("Video");
    setMouseCallback("Video", onMouseEvent, &frame);
    
    // 读取视频帧并显示
    while (capture.read(frame))
    {
        imshow("Video", frame);
        
        if (waitKey(30) == 27)
        {
            break;
        }
    }
    
    // 释放视频捕捉设备
    capture.release();
    destroyAllWindows();
    
    return 0;
}
Salin selepas log masuk

Dengan kod di atas, kita boleh memilih kawasan sasaran melalui bingkai tetikus dalam tetingkap video terbuka. Apabila anda melepaskan butang tetikus, kotak segi empat tepat muncul di atas kawasan sasaran. Kita boleh mendapatkan koordinat sudut kiri atas dan sudut kanan bawah kotak sasaran dan menggunakannya untuk operasi penjejakan sasaran seterusnya.

Penentukuran sasaran ialah pautan yang sangat penting dalam penjejakan berbilang objek Penentukuran sasaran yang tepat boleh membimbing operasi penjejakan seterusnya. Dengan menggunakan perpustakaan seperti OpenCV dan menulis contoh kod yang sepadan, kami boleh melaksanakan fungsi penentukuran sasaran dengan mudah. Semoga artikel ini dapat memberi manfaat kepada pembaca.

Atas ialah kandungan terperinci Masalah penentukuran sasaran dalam penjejakan berbilang objek. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan