현재 점의 벡터 끝에 새로운 점을 추가하는 데 문제가 있습니다. 그것이 현재하고있는 것은 내가 추가하려고하는 새로운 점으로 기존의 벡터를 덮어 쓰는 것입니다. Push_back은 벡터에 새 것을 추가하는 대신 현재 점을 대체합니다.
이
클래스 정의 (.H 파일)입니다 :class person
{
public:
person();
~person();
int ID;
std::vector<cv::Point> history;
void addposition(cv::Point);
void person::drawhistory(cv::Mat*,std::vector<cv::Point>);
};
그리고이 얼마나 클래스의 .cpp 파일에 나타나는 함수 선언 :
person::person()
{
}
person::~person()
{
}
void person::addposition(cv::Point inpt) {
std::cout << "Adding a position ----" << std::endl;
std::cout << "Pushing inpt.x: " << inpt.x << std::endl;
std::cout << "Pushing inpt.y: " << inpt.y << std::endl;
history.push_back(inpt);
std::cout << "Current Size: " << history.size() << std::endl;
if (history.size()>15)
{
history.erase(history.begin());
}
}
void person::drawhistory(cv::Mat* image, std::vector<cv::Point> hist) {
cv::Point pt;
for (cv::Point const& pt : hist)
{
std::cout << "Printing the History" << std::endl;
std::cout << "Current Pt.x: " << pt.x << std::endl;
std::cout << "Current Pt.y: " << pt.y << std::endl;
cv::circle(*image, pt, 5, cv::Scalar(0, 0, 0), -1);
}
}
그리고 이것이 이 두 함수가 main 함수에서 어떻게 호출되는지.
vector<RECT> detectBox
를하고 올바르게 프레임에 필요한 사항을 저장하고, 그래서 문제의 원인이 아니라고 확신 메신저 : detectBox 같은 선언합니다
for (RECT const& rect : *detectBox)
{
std::cout << "Inside the LOOOOOP" << std::endl;
//This is simply finding the middle point of the rectangle currently stored in detectBox
pt.y = (rect.bottom + rect.top)/2;
pt.x = (rect.left + rect.right)/2;
person personn;
personn.addposition(pt);
personn.drawhistory(&img_8bit, personn.history);
cv::circle(img_8bit, pt, 3, cv::Scalar(255, 255, 0), -1);
}
cv::imshow("8Bit", img_8bit);
포인트를 벡터에 밀어 넣는 것은 간단하지만 벡터의 바닥에 새 포인트를 추가하지 않는 것이 좋을 것이라고 생각합니다. 또한 저장된 포인트 수를 15로 유지하는 지우기 단계를 추가했음을 유의하십시오.
클래스 정의에있는 함수에 문제가 있거나 클래스에 새로운 기능이 있습니까? 메인 루프에서 함수 호출?
루프를 통해 매번 '사람'의 새 인스턴스를 만듭니다. 그러한 각각의 인스턴스는 태어 났고, 단일 포인트가 추가 된 다음 죽습니다. 루프 밖에서 변수를 선언하십시오. –
왜냐하면 나는 _history_의 현재 크기를 인쇄 할 때만 1의 크기를 되돌려주기 때문입니다. 나는 벡터가 가장 최근의 15 점까지 작성 될 것으로 기대하고 있습니다. –