有个很著名的“车辆计数”项目,原版应该是慕课上的项目,然后B站有挪用的视频,优快云上也有原版代码。但都是用python写的,我就准备用C++复现一下。毕竟学C++才一个月对我来说还是蛮有挑战性的。
其它都没啥问题,关键卡在了一步往vector里push_back点,但是我逐步运行编译发现这个vector一直是0维度的,我怀疑了各种问题,是不是子函数写错了返回不了数据,还是声明变量、调用变量的方式出现错误。
花了好久我才发现,轮廓的维度也是0啊,但轮廓那一块我不可能写错的,最后我意识到,那是因为这个循环只看到了第一帧,我要是跳到后面几帧才会发现轮廓和vector维度不在是0了。
以下是代码,亲测能跑,但效果嘛~
欢迎交流
另外原作者在找中心点这一部分是用array做的,而且python做起来简单太多了。C++我当然想着用vector去做,但奈何我基础不好,在vector类型数据的索引上又思考了好久想不出来,后面换了直接写进去的方式也算是成功了。
真心欢迎大神看到我的代码进行交流!
#include <opencv2/opencv.hpp>
#include<iostream>
#include<vector>
using namespace cv;
using namespace std;
int cx, cy;
int center(int x, int y, int w, int h);
int center(int x, int y, int w, int h) {
int x1 = int(w / 2);
int y1 = int(h / 2);
cx = x + x1;
cy = y + y1;
return 0;
}
//检测线的高度和偏移
int line_high = 550;
int offset = 7;
int carno = 0;
Point cpoint;
int min_w = 90;
int min_h = 90;
Ptr