java 获取矩形的坐标_围绕像素坐标计算矩形

这首先是集群问题 . 由于您不知道群集(组)的数量,因此必须使用一些不需要群集数量作为输入的算法 . 你可以做简单的cv::partition,它在C中有以下签名:

int cv::partition(const vector<_tp>& vec, vector& labels, _EqPredicate predicate=_EqPredicate())

Example of using it:

std::vector<:point> pixelCoordinatesTable,

std::vector labelsTable;

double threshold= 5;//Max eqludian distance between one cluster points

cv::partition(pixelCoordinatesTable, labelsTable, [&threshold](auto const& l, auto const& r){

return cv::norm(l - r))

});

另一个更成熟的选择是使用真正的聚类算法,如DBSCAN . 这是一种基于密度的聚类算法 . 你可以找到一个C implementation here .

获得集群后(在任何方法中)只需在每个 cluster 周围应用 cv::boundingRect 即可获得所需的 rectangle .

EDIT:

解决矩形问题:

auto cluster_count = cv::partition(cvCoordsTable, testVector, Dist(eqludianThreshold)); // gettting the number of clusters

std::vector<:rect> rectTable;

rectTable.reserve(cluster_count);//Optimiaztion

for(int in = 0; in < cluster_count; in++){

std::vector<:point> temp;

temp.reserve(testVector.size());

for(size_t i=0;i

if(testVector[i]==in){

temp.emplace_back(rectTable[i]);

}

}

rectTable.emplace_back(cv::boundingRect(temp));

}

我确信有更好更快的方法,我只是在解释这个想法,你可以尽可能优化它 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值