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
    评论
在Cesium中获取矩形坐标可以通过以下步骤实现: 1. 创建矩形对象。可以使用Cesium.Rectangle类创建一个矩形对象,代码示例如下: ``` var rectangle = Cesium.Rectangle.fromDegrees(west, south, east, north); ``` 其中,west、south、east和north分别表示矩形的西、南、东、北四个顶点的经纬度坐标。 2. 获取矩形的四个顶点坐标。可以使用Cesium.Rectangle类的四个属性获取矩形的四个顶点坐标,代码示例如下: ``` var west = rectangle.west; var south = rectangle.south; var east = rectangle.east; var north = rectangle.north; ``` 3. 将矩形坐标转换为笛卡尔坐标。可以使用Cesium.Ellipsoid类将矩形坐标转换为笛卡尔坐标,代码示例如下: ``` var ellipsoid = viewer.scene.globe.ellipsoid; var southwest = ellipsoid.cartographicToCartesian(Cesium.Cartographic.fromDegrees(west, south)); var northeast = ellipsoid.cartographicToCartesian(Cesium.Cartographic.fromDegrees(east, north)); ``` 在上述代码中,首先获取了Viewer对象的场景中的椭球体对象(即地球),然后使用该对象的cartographicToCartesian方法将矩形的西南角和东北角坐标从经纬度转换为笛卡尔坐标。 4. 使用笛卡尔坐标创建矩形实体。可以使用Cesium.Entity类创建一个矩形实体,并设置其位置和尺寸属性,代码示例如下: ``` var entity = viewer.entities.add({ rectangle : { coordinates : rectangle, height : 0, extrudedHeight : 0, material : Cesium.Color.RED.withAlpha(0.5) } }); ``` 在上述代码中,使用了Cesium的Color类创建了一个半透明的红色材质,并将其作为矩形实体的材质属性。同时,将矩形的位置属性设置为rectangle对象,将高度属性设置为0,表示矩形是一个平面对象。 希望这些代码示例能够帮助你在Cesium中获取矩形坐标

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值