在opencv中有一个数据类型名称Rect,他的一个构造函数是这样的:
Rect(Point pt1,Point pt2)。
然后你可以使用它的方法裁剪Mat
Mat.submat(Rect roi)。
使用此方法,您可以从两个点创建一个正方形,裁剪Mat。
我正在使用其他数据类型,所以我不能使用opencv,我需要知道这个算法是如何实现的,或者我可以在哪里阅读它。
答案 0 :(得分:0)
最简单的解决方案是循环使用像素并将其复制,见下文。 OpenCV当然使用更优化和复杂的代码 - 您必须浏览源代码才能找到实现。如果你正在寻找一个简单的解决方案而不担心效率,下面的代码段应该有所帮助。
YourImageType ExtractSubImage(YourImageType sourceImage, RECT roi)
{
YourImageType destImage;
<Allocate destImage with size same as roi>
for (int rowSrc = roi.top, rowDst = 0, pixelDst = 0; rowSrc <= roi.bottom; rowSrc++, rowDst++)
{
int pixelSrc = sourceImage.width * rowSrc + roi.left;
for (int colSrc = roi.left, colDst = 0; colSrc <= roi.right; colSrc++, colDst++, pixelSrc++, pixelDst++)
{
destImage.buffer(pixelDst) = sourceImage.buffer(pixelSrc);
}
}
return destImage;
}