如果使用
之类的东西sourceMat.copyTo(destinationMat(roiRect));
roiRect
的大小为sourceMat
,如果roiRect
部分位于destinationMat
的边界之外,则会失败。
在无数的OpenCV方法中,有一种简单的方法可以将此副本剪切到有效的目标区域而不计算源和目标矩阵的剪切ROI吗?
答案 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);