OpenCV规范方式复制到剪裁在图像边界的ROI

时间:2015-06-28 12:15:49

标签: c++ opencv

如果使用

之类的东西
sourceMat.copyTo(destinationMat(roiRect));

roiRect的大小为sourceMat,如果roiRect部分位于destinationMat的边界之外,则会失败。

在无数的OpenCV方法中,有一种简单的方法可以将此副本剪切到有效的目标区域而不计算源和目标矩阵的剪切ROI吗?

1 个答案:

答案 0 :(得分:0)

您可以使用warpAffine并将转换矩阵设置为正确的转换。如果希望目标rect具有不同的大小,则可以向转换添加缩放。

我用它来制作2d翻译矩阵:

inline cv::Mat TranslationMat2d(const float dx, const float dy) {
    cv::Mat result = cv::Mat::eye(cv::Size(3, 3), CV_32FC1);
    result.at<float>(2, 0) = dx;
    result.at<float>(2, 1) = dy;
    return result;
}

然后使用warpAffine:

warpAffine(srcImage, dstImage, translationMat, imgSize, INTER_LINEAR, BORDER_CONSTANT, backgroundColor);