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; }
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; }
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!