作为我之前关于显示锚点的问题的后续问题,我将 CCSprite子类化并更改其绘制方法如下:
[super draw];
ccDrawColor4F(0, 1, 0, 1);
ccDrawCircle(self.anchorPointInPoints, 20, 0, 8, YES);
Run Code Online (Sandbox Code Playgroud)
这非常有效.为了额外的功劳,我添加了以下内容来显示其边界框:
CGRect bb = self.boundingBox;
CGPoint vertices[4] = {
[self convertToNodeSpace:ccp(bb.origin.x, bb.origin.y)],
[self convertToNodeSpace:ccp(bb.origin.x + bb.size.width, bb.origin.y)],
[self convertToNodeSpace:ccp(bb.origin.x + bb.size.width, bb.origin.y + bb.size.height)],
[self convertToNodeSpace:ccp(bb.origin.x, bb.origin.y + bb.size.height)],
};
ccDrawPoly(vertices, 4, YES);
Run Code Online (Sandbox Code Playgroud)
这也很有用,直到我重新表达一个精灵:
CGPoint oldPosition = [sprite convertToWorldSpace:sprite.position];
[sprite removeFromParentAndCleanup:NO];
[parentSprite addChild:sprite];
sprite.position = [sprite convertToNodeSpace:oldPosition];
Run Code Online (Sandbox Code Playgroud)
精灵现在处于正确的位置,它的锚点在它应该的位置绘制,但是边界框在错误的位置绘制.我究竟做错了什么?
我有一个包含多个边界框的图像.
我需要提取其中包含边界框的所有内容.到目前为止,从这个网站我得到了这个答案:
y = img[by:by+bh, bx:bx+bw]
cv2.imwrite(string + '.png', y)
Run Code Online (Sandbox Code Playgroud)
然而,它只有一个.我该如何修改代码?我尝试将它放在轮廓的循环中,但它仍然喷出一个图像而不是多个图像.
非常感谢你提前.
在大图像中测试物体检测算法时,我们根据为地面实况矩形给出的坐标检查我们检测到的边界框.
根据Pascal VOC挑战,有这样的:
如果预测的边界框与地面实况边界框重叠超过50%,则认为该边界框是正确的,否则边界框被认为是误报检测.多次检测会受到处罚.如果系统预测了几个与单个地面实况边界框重叠的边界框,则只有一个预测被认为是正确的,其他预测被认为是误报.
这意味着我们需要计算重叠的百分比.这是否意味着地面实况框被检测到的边界框覆盖了50%?或者50%的边界框被地面真值箱吸收了?
我已经搜索了但是我没有为此找到一个标准算法 - 这是令人惊讶的,因为我会认为这是计算机视觉中非常常见的东西.(我是新手).我错过了吗?有谁知道这类问题的标准算法是什么?
python bounding-box object-detection computer-vision scikit-image
我有一堆图像都适合400px×400px的盒子(也就是说,其中一个尺寸为400px,另一个尺寸较小).我希望能够,使用CSS,但jquery/javascript,如果有必要,将图像适合200px乘200px的盒子,这样图像的两个边缘触摸盒子,并且在另外两个边缘之间有一个间隙盒子.必须保持宽高比.
我的HTML如下:
<div class="small">
<img src="/images/photos/View.jpg" alt="View" />
</div>
Run Code Online (Sandbox Code Playgroud)
我的CSS是:
div.images div.small
{
width:200px;
height:200px;
line-height:200px;
text-align:center;
}
div.images div.small img
{
vertical-align:middle;
max-width:200px;
max-height:200px;
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到一个样本.
不幸的是,我的风景图像拥抱了盒子的顶部,而我希望它们居中.而且,我不确定依赖max-width
/ 的智者max-height
.
如何将图像置于这些框中?
鉴于调用的结果,提供imagettfbbox()
的正确的像素完美点是什么imagettftext()
,文本不会超出其边界框?
我正在从边界框中确定基线的宽度/高度和x/y,如下所示:
$box = imagettfbbox($size, $angle, $font, $text);
$boxXCoords = array($box[0], $box[2], $box[4], $box[6]);
$boxYCoords = array($box[1], $box[3], $box[5], $box[7]);
$boxWidth = max($boxXCoords) - min($boxXCoords);
$boxHeight = max($boxYCoords) - min($boxYCoords);
$boxBaseX = abs(min($boxXCoords));
$boxBaseY = abs(min($boxYCoords));
Run Code Online (Sandbox Code Playgroud)
然后,我在边界框尺寸的图像上绘制一个填充矩形:
imagefilledrectangle($image, 0, 0, $boxWidth - 1, $boxHeight - 1, $color);
Run Code Online (Sandbox Code Playgroud)
之后,我画了文字:
imagettftext($image, $size, $angle, $boxBaseX, $boxBaseY, $color, $font, $text);
Run Code Online (Sandbox Code Playgroud)
但是,这会导致文本超出矩形一两个像素.我已经看过几次尝试在PHP的imagettfbbox()
文档中解决这个问题,但他们都建议在这里和那里减去一两个像素,这对我来说似乎是一个黑客.这里发生了什么,为什么我们需要捏造数字以使事情正确?
在具有2D网格地图的游戏中,我面临以下情况:
我需要找到围绕玩家位置(红点)的最大边界方块.或者至少是最大尺寸的边界,因为可能会有更多.注意:方形,而不是矩形.
在这种情况下,很容易看到最大的正方形是8x8:
如果我在地图中添加障碍物,最大的可能性现在是5x5:
我正在寻找一种快速有效的方法来找到包含玩家位置的(或者)最大正方形.
我目前正在做的是一种蛮力:
它的工作原理很简单,但感觉非常低效.显然我在这里做了很多冗余检查,我想知道是否有更聪明/更快的方法来做到这一点.有谁知道有效地做到这一点的算法?
(编辑)重要补充:除了玩家四处移动外,还会动态添加或移动障碍物或墙壁,因此这里的缓存或预先优化很难实现.
我在天空图上有一系列点。我想找到这些点占据的面积。
为此,我需要找到包围这些点的多边形的顶点 - 将这些点转换为等积投影,然后计算出面积。
除了如何计算包围图形上的点的多边形的顶点之外,我还编写了所有代码。做这个的最好方式是什么?
我正在努力计算一组点的最小封闭矩形(任意对齐).
我能够使用格雷厄姆算法计算凸包.
我陷入困境的是下一步.我想过使用旋转卡尺方法,但我似乎无法找到对算法的充分解释.
我有一组点[(x0,y0),(x1,y1),..]
并使用该cv2.boundingRect(someContour)
函数生成一组边界矩形.每个边界框是一个具有四个坐标的可迭代对象(a,b,c,d)
.我的问题是:
这四个数字是什么意思?
如何检查每个给定点是否包含在边界矩形内?
我知道opencv for C++有'contains'方法,但它不存在python.
我正在使用 vulkan 计算着色器开发路径跟踪器。我实现了一个表示边界卷层次结构的树。BVH 的想法是最小化需要执行光线交叉测试的对象数量。
#1 幼稚的实现
我的第一个实现非常快,它将树向下遍历到BVH 树的单个叶子。但是,射线可能会与多个叶子相交。这段代码会导致一些三角形没有被渲染(尽管它们应该)。
int box_index = -1;
for (int i = 0; i < boxes_count; i++) {
// the first box has no parent, boxes[0].parent is set to -1
if (boxes[i].parent == box_index) {
if (intersect_box(boxes[i], ray)) {
box_index = i;
}
}
}
if (box_index > -1) {
uint a = boxes[box_index].ids_offset;
uint b = a + boxes[box_index].ids_count;
for (uint j = a; j < b; j++) { …
Run Code Online (Sandbox Code Playgroud) bounding-box ×10
python ×4
algorithm ×2
opencv ×2
css ×1
extraction ×1
gd ×1
geometry ×1
glsl ×1
image ×1
javascript ×1
optimization ×1
php ×1
polygons ×1
raster ×1
raytracing ×1
scikit-image ×1
text ×1
vulkan ×1