Opencv 如何去掉图片低端的一条横线?

2018 年 1 月 14 日
 woshichuanqilz

低端有一条很小的蓝线请问如何去掉?

这个是原图请问如何去出掉低端的横线。

7065 次点击
所在节点    Python
11 条回复
inflationaaron
2018 年 1 月 14 日
直接用 PIL 不行吗
Hzzone
2018 年 1 月 14 日
mask
MinQ
2018 年 1 月 14 日
height 高于某个定值,如果 RGB 颜色不是白色,填充这个像素为白色,收工
merliny
2018 年 1 月 14 日
数数那是多少像素,然后 rect,把上面的部分截取出来,或者直接把下面的全部写成相同像素
defphilip
2018 年 1 月 14 日
如果图片只有这条横线,而且一定是最底端,图片都这么大,那么你直接把最底端的像素的颜色都设置成背景颜色就好了

如果这条横线还会在其他地方,你可以用 HoughLineP (设置 threshold 和 minLineLength 俩参数),找最长的那条直线,因为斜率一定是 0,所以 HoughLineP 对应的第一个点的纵坐标就是直线的那个位置
woshichuanqilz
2018 年 1 月 14 日
@woshichuanqilz @inflationaaron @Hzzone @MinQ @yuyongji1987 @defphilip 是这样的, 主要有多个图片, 这个只是一个个例, 而且高度多少不一定, 可能多点, 可能少点, 三楼的方法 ok 但是感觉代码还是写的有点死, ok 我先试下谢谢。
thinkItThrough
2018 年 1 月 14 日
5 楼哈夫变换线识别可解,简单点的话就遍历一遍就行了
xujialiang
2018 年 1 月 14 日
opencv 运行下面代码,可以看到如图
http://image.xujialiang.net/WX20180114-172635@2x.png
很容易看出从第一行开始切割。。



import cv2
import numpy as np
import matplotlib.pyplot as plt


ori_img = cv2.imread('./TestData/' + '111.png')


im_gray = cv2.cvtColor(ori_img, cv2.COLOR_BGR2GRAY)
im_at_mean = cv2.adaptiveThreshold(im_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 10)
cv2.imshow('im_at_mean' , im_at_mean)

im_at_mean_inv = cv2.bitwise_not(im_at_mean)
horizontal_sum = np.sum(im_at_mean_inv, axis=1)
plt.plot(horizontal_sum, range(horizontal_sum.shape[0]))
plt.gca().invert_yaxis()
plt.show()

cv2.waitKey(0)
cv2.destroyAllWindows()
xujialiang
2018 年 1 月 14 日
上面打错一个字。。。很容易看出从第几行开始切割。。
hackcv
2018 年 1 月 14 日
可以统计每行的 RGB 色彩的数量,如果某一行同一颜色的数据和列数差不多(可以设置个阈值),就可以把这行看做是一条横线,直接切掉或者修改这行颜色即可。
singer
2018 年 1 月 14 日
不用 opencv 也行的。
读取一下像素值。大于多少高度(避免把字给处理了),颜色值低于 255(阈值自己设置)的都置位 255

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/422755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX