我正在尝试检测xkcd漫画的面板,以便将它们剪掉。我想检索随机的XKCD漫画(已实现),并可靠地知道面板的角在哪里。我的理想输出如下:
其中我有一些或所有的角落面板。 我有一个包含整个漫画的数组,到目前为止,我的方法是找到大轮廓,如下所示:
contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
conts=[]
if len(contours) > 1:
conts = sorted(contours, key=cv2.contourArea, reverse=True)[0]
然后使用cv2.APROXPOLYDP检测角点。然而,我的轮廓似乎还不够,因为我通常不会得到好的角,而且当我画轮廓时,它们看起来也不太好
良好的运行:
糟糕的一个:
我想知道我的轮廓是否做错了什么,比如可能没有选择正确的模式(我选择了外部的RETR_,因为漫画面板是相当外部的)
漫画通常是灰度的,但有时不是,所以我将转换为灰度,并在轮廓检测之前使用二进制阈值
其他一些想法:
边缘检测是否更适合此任务
我还注意到我的数组在图片的边缘有边框,所以填充会有帮助吗
漫画有点变化无常,所以暴力手段会更好吗
我的直觉是轮廓区域会告诉你路径有多复杂。 我会使用一个更简单的度量,比如轮廓的高度^{} :
注意3轮廓边界框高度突出:
您可能希望选择性地将条件更改为阈值,而不是精确值。 e、 g
上面的完整代码生成:
请注意,我使用了morphological filter来放大边。 它适用于具有这些迭代的图像,因为过滤器扩展框的轮廓足够大,但不会太多,以至于它们与文本/字符合并。 这可能是其他图像需要调整的地方
更新快速搜索后,我发现了一些潜在的有趣资源:
Kumiko
Segmentation and indexation of complex objects in comic book images(与您的要求不同,但对下一步可能有用)
相关问题 更多 >
编程相关推荐