首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
拉钩
V2EX  ›  Python

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

  •  
  •   woshichuanqilz · 333 天前 · 2527 次点击
    这是一个创建于 333 天前的主题,其中的信息可能已经有所发展或是发生改变。

    20180114113101

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

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

    11 回复  |  直到 2018-01-14 18:29:37 +08:00
        1
    inflationaaron   333 天前 via iPhone
    直接用 PIL 不行吗
        2
    Hzzone   333 天前 via iPhone
    mask
        3
    MinQ   333 天前 via Android
    height 高于某个定值,如果 RGB 颜色不是白色,填充这个像素为白色,收工
        4
    yuyongji1987   333 天前 via iPhone
    数数那是多少像素,然后 rect,把上面的部分截取出来,或者直接把下面的全部写成相同像素
        5
    defphilip   333 天前
    如果图片只有这条横线,而且一定是最底端,图片都这么大,那么你直接把最底端的像素的颜色都设置成背景颜色就好了

    如果这条横线还会在其他地方,你可以用 HoughLineP (设置 threshold 和 minLineLength 俩参数),找最长的那条直线,因为斜率一定是 0,所以 HoughLineP 对应的第一个点的纵坐标就是直线的那个位置
        6
    woshichuanqilz   332 天前
    @woshichuanqilz @inflationaaron @Hzzone @MinQ @yuyongji1987 @defphilip 是这样的, 主要有多个图片, 这个只是一个个例, 而且高度多少不一定, 可能多点, 可能少点, 三楼的方法 ok 但是感觉代码还是写的有点死, ok 我先试下谢谢。
        7
    thinkItThrough   332 天前
    5 楼哈夫变换线识别可解,简单点的话就遍历一遍就行了
        8
    xujialiang   332 天前
    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()
        9
    xujialiang   332 天前
    上面打错一个字。。。很容易看出从第几行开始切割。。
        10
    hackcv   332 天前
    可以统计每行的 RGB 色彩的数量,如果某一行同一颜色的数据和列数差不多(可以设置个阈值),就可以把这行看做是一条横线,直接切掉或者修改这行颜色即可。
        11
    singer   332 天前 via iPhone
    不用 opencv 也行的。
    读取一下像素值。大于多少高度(避免把字给处理了),颜色值低于 255(阈值自己设置)的都置位 255
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3565 人在线   最高记录 4019   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 17ms · UTC 06:59 · PVG 14:59 · LAX 22:59 · JFK 01:59
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1