OpenCV の内容をオフセットする方法を探していMat
ます。オフセットのために画像がない場所に境界線の色を追加します。
void OffsetImage(Mat &image, cv::Scalar bordercolour, int xoffset, int yoffset)
{
...
}
どうすればこれを行うことができますか-できれば入力Mat
画像をコピーせずに?
おそらくこれを行う最もエレガントな方法は、透視変換を使用することです。
void OffsetImage(cv::Mat &image, cv::Scalar bordercolour, int xoffset, int yoffset)
{
if(xoffset != 0 && yoffset != 0)
{
cv::Mat H = (cv::Mat_<double>(3,3) <<
1, 0, xoffset, 0, 1, yoffset, 0, 0, 1);
cv::Mat aux;
cv::warpPerspective(image, aux, H, image.size(), cv::INTER_LINEAR,
cv::BORDER_CONSTANT, bordercolour);
image = aux;
}
}
何かのようなもの:
void OffsetImage(Mat &image, cv::Scalar bordercolour, int xoffset, int yoffset)
{
Mat temp(image.rows+2*yoffset,image.cols+2*xoffset,image.type(),bordercolour);
Mat roi(temp(cvRect(xoffset,yoffset,image.cols,image.rows)));
image.copyTo(roi);
image=temp.clone();
}