dlib tracking 代码

#include <dlib/image_processing.h>
#include <dlib/gui_widgets.h>
#include <dlib/image_io.h>
#include <dlib/dir_nav.h>
#include <dlib/opencv.h>

#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>

using namespace std;
using namespace cv;
using namespace dlib;

static dlib::drectangle cvtRectToDrect(cv::Rect _rect)
{
	return dlib::drectangle(_rect.tl().x, _rect.tl().y, _rect.br().x - 1, _rect.br().y - 1);
}

static dlib::array2d<unsigned char> cvtMatToArray2d(cv::Mat _mat) // cv::Mat, not cv::Mat&. Make sure use copy of image, not the original one when converting to grayscale
{

	//Don't need to use color image in HOG-feature-based tracker
	//Convert color image to grayscale
	if (_mat.channels() == 3)
		cv::cvtColor(_mat, _mat, cv::COLOR_RGB2GRAY);

	//Convert opencv 'MAT' to dlib 'array2d<unsigned char>'
	dlib::array2d<unsigned char> dlib_img;
	dlib::assign_image(dlib_img, dlib::cv_image<unsigned char>(_mat));

	return dlib_img;
}

int main(int argc, char* argv[])
{
	string videoPath = "d://78.avi";

	cv::VideoCapture cap(videoPath);
	Mat frame;

	// quit if unabke to read video file
	if (!cap.isOpened())
	{
		cout << "Error opening video file " << videoPath << endl;
		return -1;
	}

	cap.set(CAP_PROP_POS_FRAMES, 50);
	// read first frame
	cap >> frame;

	bool showCrosshair = false;
	bool fromCenter = false;
	cv::Rect rt = cv::selectROI("Video", frame, showCrosshair, fromCenter);

	dlib::correlation_tracker tracker;
	dlib::drectangle dlib_rect = cvtRectToDrect( rt );

	dlib::array2d<unsigned char> dlib_frame = cvtMatToArray2d(frame);
	tracker.start_track(dlib_frame, dlib_rect);

	while (cap.isOpened())
	{
		cap >> frame;

		// stop the program if reached end of video
		if (frame.empty())
			break;

		//cv::Rect current = tracker.update(frame);
		dlib::array2d<unsigned char> dlib_img = cvtMatToArray2d( frame );

		// Track using dlib::update function
		double confidence = tracker.update(dlib_img);
		dlib::drectangle updated_rect = tracker.get_position();
		cv::Rect outRect = cv::Rect(updated_rect.tl_corner().x(), updated_rect.tl_corner().y(), updated_rect.width(), updated_rect.height());
		cv::rectangle(frame, outRect, cv::Scalar(0, 255, 255), 2);

		cv::imshow("Dlib Tracking...", frame);
		cv::waitKey(1);
	}

}

这是今天写的测试代码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值