you can define a temporary cv::Mat variable and add or subtract shifting values
take a look
#include <iostream>
#include <opencv2/core.hpp>
void TranslateSimpleContour(cv::Mat &contour, const int &shiftHorizontal, const int &shiftVertical) // translate simple contour along vertical and/or horizontal axis
{
cv::Scalar t(shiftHorizontal, shiftVertical);
contour = contour + t;
}
// generated by ChatGPT
template <typename PointType>
void TranslateSimpleContour(std::vector<PointType>& contour, typename PointType::value_type shiftHorizontal, typename PointType::value_type shiftVertical)
{
PointType translation(shiftHorizontal, shiftVertical);
for (auto& point : contour)
{
point += translation;
}
}
int main(int , const char** )
{
std::vector<cv::Point> contour2i = { {168, 212}, {92, 192}, {131, 109}, {213, 100} };
std::vector<cv::Point2f> contour2f = { {16.8f, 21.2f}, {9.2f, 19.2f}, {13.1f, 10.9f}, {21.3f, 10.0f} };
std::vector<cv::Point2d> contour2d = { {16.8, 2.12}, {9.2, 1.92}, {1.31, 1.09}, {2.13, 10.0} };
std::cout << contour2i << std::endl;
cv::Mat tmp = cv::Mat(contour2i);
TranslateSimpleContour(tmp, 1, 2);
std::cout << contour2i<< std::endl;
std::cout << contour2f << std::endl;
tmp = cv::Mat(contour2f);
TranslateSimpleContour(tmp, 1, 2);
std::cout << contour2f<< std::endl;
std::cout << "---------------------------------" << std::endl;
//-------------------------------------------
std::cout << contour2i << std::endl;
TranslateSimpleContour(contour2i, 1, 2);
std::cout << contour2i<< std::endl;
std::cout << contour2f << std::endl;
TranslateSimpleContour(contour2f, 1, 2);
std::cout << contour2f<< std::endl;
std::cout << "---------------------------------" << std::endl;
//-------------------------------------------
std::cout << contour2f << std::endl;
tmp = cv::Mat(contour2f);
tmp = tmp + cv::Scalar(1.6, 2.6);
std::cout << contour2f<< std::endl;
std::cout << contour2d << std::endl;
tmp = cv::Mat(contour2d);
tmp = tmp + cv::Scalar(1.6, 2.6);
std::cout << contour2d<< std::endl;
return 0;
}