python - 如何检测多个附加图像并将其剪掉?

标签 python image opencv image-processing cut

晚上好:)

我想创建一个脚本,能够一张一张地剪切大图像上的图像,所以我想剪切出 9 个不同的图像。

enter image description here

剪掉这些图像并没有那么困难,因为实际上只要剪掉好的台词就足够了,然后轮到..那么我的问题在哪里?

这个问题变得复杂,因为确实存在好几种不同的图片;例如,我的脚本很可能落在大图像上,例如 enter image description here

(这里可以看到8张不同的图片,所以要剪的线是不一样的)。

那我怎么去那里呢?

我还是个初学者,我什么都不懂:(

我希望我已经尽可能清楚了。 非常感谢您!

最佳答案

创建两个数组,一个长度为图像宽度,一个长度为图像高度,并用零初始化它们。

由于您正在尝试测试水平线和垂直线的相似性,因此您应该遍历图像像素并比较位置 (x,y) 中的每个像素。到位置 (x+1,y) 中的像素和 (x,y+1)这意味着每个像素都与它右边的像素和它下面的像素进行比较。 每次比较的结果都应该有一个相似度百分比。

要计算两个像素的相似度百分比,您可以按照以下问题的答案进行操作: Algorithm to check similarity of colors

位置(x,y)中像素的每次水平比较的百分比结果应添加到位置x中的水平数组中的值中. 例如,如果:

pixel(3,0) compare to pixel(4,0) = 80%
horizontalArray[3] += 80% (80)
pixel(3,1) compare to pixel(4,1) = 72%
horizontalArray[3] += 72% (152)
pixel(3,2) compare to pixel(4,2) = 95%
horizontalArray[3] += 95% (247)
...

并以类似的方式计算垂直比较的值:

pixel(0,3) compare to pixel(0,4) = 22%
verticalArray[3] += 80% (22)
pixel(1,3) compare to pixel(1.4) = 10%
verticalArray[3] += 72% (32)
pixel(2,3) compare to pixel(2,4) = 76%
verticalArray[3] += 95% (108)
...

在遍历所有 pf 之后,图像像素将 horizo​​ntalArray 中的值除以图像高度,将 verticalArray 中的值除以图像宽度。这个 Action 的结果现在给你留下了两个数组,其中包含你图片中每条水平线和每条垂直线的平均相似度百分比,现在你可以选择一个任意的魔数(Magic Number),比如说 15% 并且每条线都小于 15 % similarity 是一条线,您将根据它进行切割。

测试脚本并查看它找到正确行的准确度。

如果它不够敏感,请增加您的“魔数(Magic Number)”的值,如果它太敏感,请找到不应降低此魔数(Magic Number)值的行,然后重试。

编辑

我编辑了我对颜色相似度公式的建议,因为它有错误会导致不准确的结果。 相反,我添加了对另一个处理颜色比较问题的答案的引用,将它与算法的其余部分一起使用,它应该可以工作。

关于python - 如何检测多个附加图像并将其剪掉?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45338052/

相关文章:

python - 如何获取与另一个像素成一定角度的像素值?

opencv - SIFT 描述符值 : OpenCV vs VLFeat

linux - 文件末尾缺少换行符

python - XGBoost 预测输出不是二进制的?

python - 从 CSV 输出字符串与列表的问题

python - 在 Python 的控制台上取消打印一行?

java - 如何使 JFrame 中出现新图像?

c# - 将字节从 sql server 渲染到图像控件?

python - 如何减去与Python中不同时间间隔相对应的pandas列?

python - cv2.imread 不读取 jpg 文件