【发布时间】:2018-07-30 08:50:08
【问题描述】:
我正在尝试对 opencv 点的向量进行排序,如果点的类型为 cv::Point2i,我可以成功。一旦点的类型为 float cv::Point2f,程序就不会编译。
错误是
错误:没有匹配函数调用'__set_intersection_points'sort(std::vector >::iterator, stdcv::vectorPoint_ >::iterator, std::vector >::iterator, std::vector >::iterator, stdcv::vectorPoint_ > >::iterator, )' __set_intersection_points std::iterator>(coordinates1.begin(), coordinates1.endsort(), coordinates2frame_stencil_displacement.begin(), coordinates2frame_stencil_displacement.end(), results_coordinates。 begin(), &comparePointsIntersection::iterator>comparePointsSort>);
我有自己的比较函数,因为默认比较函数不支持 cv::Points(使用 .x 和 .y 而不是 .first 和 .second 取消引用)
template <typename T>
bool comparePointsSort(T lhs, T rhs){
if ( lhs.x == rhs.x )
return (lhs.y < rhs.y);
else
return (lhs.x < rhs.x) ;
}
void points_mine() {
std::vector<cv::Point2i> coordinates1(MAX_INDEX), coordinates2(MAX_INDEX);
coordinates1 = {{1, 2}, {9, 10}, {5, 6}, {7, 8}, {5, 4}};
coordinates2 = {{1, 2}, {0, 0}, {5, 4}, {7, 8}, {9, 10}};
std::sort(coordinates1.begin(), coordinates1.end(), comparePointsSort<cv::Point2i>);
std::sort(coordinates2.begin(), coordinates2.end(), comparePointsSort<cv::Point2i>);
for ( ushort index = 0; index < MAX_INDEX; index++ ) {
std::cout << "co1 " << coordinates1.at(index).x << " " << coordinates1.at(index).y << std::endl;
}
for ( ushort index = 0; index < MAX_INDEX; index++ ) {
std::cout << "co2 " << coordinates2.at(index).x << " " << coordinates2.at(index).y << std::endl;
}
std::vector<cv::Point2i> results_coordinates(10);
__set_intersection_points<std::vector<cv::Point2i>::iterator>(coordinates1.begin(), coordinates1.end(), coordinates2.begin(), coordinates2.end(), results_coordinates.begin(), &comparePointsIntersection<std::vector<cv::Point2i>::iterator>);
std::cout << "begin intersection" << std::endl;
for ( const auto index : results_coordinates ) {
std::cout << index.x << " " << index.y << std::endl;
}
}
int main(int argc, char *argv[]) {
points_mine();
std::cout << "-------------------------------" << std::endl;
}
如何使用 cv::Point2f 类型实现此功能?
【问题讨论】:
-
尝试使用 cv::Point2f 时您的代码看起来如何?
-
@Micka 只是将 Point2i 与 Poin2f 到处更改。实际上交集部分是不相关的。因此从原始代码中删除它以便于调试。
-
在任何地方将 2i 更改为 2f 编译和运行我的系统没有任何问题:Visual Studio 2013,OpenCV 2.4