相关疑难解决方法(0)

找到N×N二进制矩阵中仅包含零的最大矩形

给定NxN二进制矩阵(仅包含0或1),我们如何才能找到包含全0的最大矩形?

例:

      I
    0 0 0 0 1 0
    0 0 1 0 0 1
II->0 0 0 0 0 0
    1 0 0 0 0 0
    0 0 0 0 0 1 <--IV
    0 0 1 0 0 0
            IV 
Run Code Online (Sandbox Code Playgroud)

对于上面的例子,它是一个6×6的二进制矩阵.在这种情况下,返回值将是单元格1:(2,1)和单元格2:(4,4).得到的子矩阵可以是正方形或矩形.返回值也可以是所有0的最大子矩阵的大小,在该示例中为3×4.

arrays algorithm

73
推荐指数
4
解决办法
5万
查看次数

如何裁剪到OpenCV中最大的内部边界框?

我在黑色背景上有一些图像,其中图像没有方形边缘(见下图右下方).我想把它们裁剪成最大的矩形图像(红色边框).我知道我可能会失去原始图像.是否可以在OpenCV中使用Python执行此操作.我知道有一些功能可以裁剪到轮廓的边界框,但这仍然会让我在地方留下黑色背景.

在此输入图像描述

python opencv

15
推荐指数
1
解决办法
6792
查看次数

任意多边形中最大的内接矩形

我曾与OpenCV Stitching合作过一段时间.现在我想做拼接的最后一步:裁剪图像.这导致在一般多边形中找到最大的内接轴平行矩形.

我已经用Google搜索并找到了一些答案(如何裁剪到OpenCV中最大的内部边界框?).尽管程序运行缓慢,但输出图像的质量仍然很好(裁剪图像需要15秒才能将36个1600x1200图像拼接成1个全景图,因为使用的算法时间复杂度很低(对于轮廓中的每个点,它扫描同一行/列中的所有点).

有什么方法可以改善吗?谢谢.

P/S:我也找到了这本书:

在多边形中找到最大面积轴平行矩形

Karen Daniels和Victor Milenkovicz Dan Rothx哈佛大学,

应用科学系,

计算技术研究中心,

剑桥,MA 02138.

1995年6月

但是我没有任何想法将这个理论应用到代码中:v

c++ algorithm math opencv

5
推荐指数
1
解决办法
3735
查看次数

使用OpenCV在blob中创建矩形

输入图片:

输出图像:

我在图像中有几个彩色斑点,我试图在每种颜色的最大斑点内创建矩形(或正方形 - 这似乎更容易).我已经找到了如何创建一个界定单个最大blob的矩形的答案,但我不确定如何找到一个简单地适合blob内部的正方形.它不一定是最大的,它必须大于某个区域,否则我就不会包含它.我也看到了一些关于多边形的工作,但没有用于非晶形状.

c++ opencv image image-processing opencv3.0

5
推荐指数
1
解决办法
2369
查看次数

通过将相似的像素分组为矩形来划分图像

考虑这样的图像:

原始图像

通过按颜色将像素分组到不同的矩形中,可以实现不同的配置,例如:

解剖图像示例

目标是找到最佳配置之一,即具有尽可能少的矩形的配置(矩形大小并不重要)。

关于如何设计能够解决这个问题的有效算法有什么想法吗?

编辑:我认为最好的答案是@dshin 的答案,因为他们证明这个问题是一个 NP-HARD 问题,所以可能没有任何有效的解决方案能够保证最佳结果。其他答案提供了合理的妥协以获得可接受的解决方案,但这并不总是最佳的。

algorithm geometry image-processing

5
推荐指数
1
解决办法
478
查看次数

二进制图像中磁盘的半径

我有像这样的二值化图像:

在此输入图像描述

我需要确定内部实心磁盘的中心和半径.正如您所看到的,它被一个接触它的纹理区域所包围,因此简单的连接组件检测不起作用.无论如何,周边的很大一部分都有一个空隙.

可能的治愈方法可能是通过侵蚀直到所有纹理消失或从磁盘断开,但这可能是耗时的并且迭代次数不确定.(此外,在一些不幸的情况下,磁盘上有小孔,随着侵蚀而增长.)

有没有更好的建议以强大而快速的方式解决这个问题?(我标记了OpenCV,但这不是强制性的,重要的是方法.)

opencv image-processing

4
推荐指数
1
解决办法
185
查看次数

将 Rect 扩展 100px

我在 C++ 中使用 OpenCV 2.4.4,并且我想让 Rect 变大 x 像素。OpenCV 文档提供了很好的示例(查找“按一定量扩展或收缩矩形”)如何在图像中使用它http://opencv.willowgarage.com/documentation/cpp/_images/math/a6f41031fb2ccaa600520bcbde63a8a9fcff9edf.png

凉爽的。唯一的问题是我不知道如何在实际的 C++ 代码中输入它。我试过:

rect rect=oldrect+-10; rect rect=oldrect-+10; 和 rect rect=oldrect±10;(为了确定,我从http://en.wikipedia.org/wiki/Plus-minus_sign复制了这个符号。

我在其中任何一个上都遇到了丑陋的错误。

有人可以解释一下,我应该使用的那个聪明的符号是什么,不可能包含在 HTML 中,所以它被嵌入为图像。

opencv

2
推荐指数
2
解决办法
9986
查看次数

标签 统计

opencv ×5

algorithm ×3

image-processing ×3

c++ ×2

arrays ×1

geometry ×1

image ×1

math ×1

opencv3.0 ×1

python ×1