如果使用类似的东西
sourceMat.copyTo(destinationMat(roiRect));
在roiRect
具有sourceMat
的大小的情况下,如果roiRect
部分位于destinationMat
的边界之外,则失败。
在OpenCV的无数方法中,有没有一种简单的方法可以将该副本剪辑到有效的目标区域,而无需计算源矩阵和目标矩阵的剪辑ROI?
您可以使用warpAffine并将变换矩阵设置为正确的平移。如果希望目标矩形具有不同的大小,则可以将缩放添加到变换中。
我用这个来制作二维翻译矩阵:
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);