我需要编写一个 OpenCV 程序,从摄像头画面中的几个人中检测出穿着带有 Logo 的特定 T 恤的人。
我可以使用 SURF 检测 Logo ,使用 HOGDescriptor 检测人。
然后我可以检查 Logo 边界框的角是否在绑定(bind)人的矩形的角内。
Logo 的角存储在:
std::vector< Point2f > scene_corners(4);
人周围矩形的角使用以下方式存储:
cv::Rect r = found[i];
我需要做如下比较:
if(scene_corners[0]>=r.tl() && scene_corners[2]<=r.br())
其中 r.tl() 和 r.br() 是矩形的角。
这行不通,我猜是因为操作数不兼容。 我该如何进行比较?提前致谢。
最佳答案
正如您所发现的,>=
运算符未针对 cv::Point
实例实现。您可以做的是构造一个 cv::Rect
来表示人的边界框。然后使用 Rect::contains()
方法来测试每个内部点。这应该符合您的比较标准。
// I assume that index 0 is top-left and index 2 is bottom-right
cv::Rect person_bounds(scene_corners[0], scene_corners[2]);
if (person_bounds.contains(r.tl()) && person_bounds.contains(r.br()))
{
// do something...
}
关于c++ - OpenCV 中的 vector 比较 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23206370/