2

OpenCV の内容をオフセットする方法を探していMatます。オフセットのために画像がない場所に境界線の色を追加します。

void OffsetImage(Mat &image, cv::Scalar bordercolour, int xoffset, int yoffset)
{
    ...
}

どうすればこれを行うことができますか-できれば入力Mat画像をコピーせずに?

4

4 に答える 4

3

おそらくこれを行う最もエレガントな方法は、透視変換を使用することです。

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;
  }
}
于 2013-06-17T12:28:43.430 に答える
1

何かのようなもの:

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();
}
于 2013-06-17T11:19:22.257 に答える