【发布时间】:2014-08-24 15:41:49
【问题描述】:
在opencv中有一个数据类型名为Rect,他的一个构造函数是这样的:
矩形(点 pt1,点 pt2)。
然后你可以使用它的方法裁剪 Mat
Mat.submat(矩形 roi).
使用这种方法,您可以从两个点创建一个正方形,然后裁剪 Mat。
我正在使用另一种数据类型,所以我不能使用 opencv,我需要知道这个算法是如何实现的,或者我可以在哪里阅读更多关于它的信息。
【问题讨论】:
在opencv中有一个数据类型名为Rect,他的一个构造函数是这样的:
矩形(点 pt1,点 pt2)。
然后你可以使用它的方法裁剪 Mat
Mat.submat(矩形 roi).
使用这种方法,您可以从两个点创建一个正方形,然后裁剪 Mat。
我正在使用另一种数据类型,所以我不能使用 opencv,我需要知道这个算法是如何实现的,或者我可以在哪里阅读更多关于它的信息。
【问题讨论】:
最简单的解决方案是遍历像素并复制它们,见下文。 OpenCV 当然使用更优化和更复杂的代码——你必须翻阅源代码才能找到实现。如果您正在寻找一个简单的解决方案而不担心效率,下面的 sn-p 应该会有所帮助。
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;
}
【讨论】: