From 2181fd6adde5551ead3c28efd8aec08c0c7b6b5d Mon Sep 17 00:00:00 2001 From: Joao Carreira Date: Sat, 29 May 2021 03:02:53 +0100 Subject: [PATCH] Do not compensate flow if point outside the image --- modules/OpticalFlow.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/OpticalFlow.cpp b/modules/OpticalFlow.cpp index 7f15004..a913339 100644 --- a/modules/OpticalFlow.cpp +++ b/modules/OpticalFlow.cpp @@ -32,6 +32,7 @@ using cv::Mat_; using cv::Point; using cv::Point2f; using cv::Ptr; +using cv::Rect; using cv::Scalar; OpticalFlowModule::OpticalFlowModule() @@ -106,6 +107,8 @@ void OpticalFlowModule::drawFlow() void OpticalFlowModule::compensateFlow() { + Rect frameShape( 0, 0, m_pcOutputFrame->getWidth(), m_pcOutputFrame->getHeight() ); + m_pcOutputFrame->reset(); for( unsigned int c = 0; c < m_pcOutputFrame->getNumberChannels(); c++ ) { ClpPel** pPelPrev = m_pcFramePrev->getPelBufferYUV()[c]; @@ -117,7 +120,8 @@ void OpticalFlowModule::compensateFlow() { Point2f u = m_cvFlow( y, x ); Point p( x + u.x, y + u.y ); - *pPelOut = pPelPrev[p.y][p.x]; + if( p.inside( frameShape ) ) + *pPelOut = pPelPrev[p.y][p.x]; pPelOut++; } }