V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
woshichuanqilz
V2EX  ›  Python

如何用 openCV 识别这个图上的道路的位置?

  •  
  •   woshichuanqilz · 2017-11-02 22:04:54 +08:00 · 4921 次点击
    这是一个创建于 2372 天前的主题,其中的信息可能已经有所发展或是发生改变。

    像这样的一副图片, 我想用 opencv 把道路的坐标确定出来应该怎么操作? 我从网上找了这个识别轮廓的代码,

    import numpy as np
    import cv2
    
    im = cv2.imread('path.png')
    imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
    ret,thresh = cv2.threshold(imgray,127,255,0)
    im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
    
    cv2.namedWindow("Contours", cv2.WINDOW_NORMAL)
    cv2.imshow("Contours", im2)
    
    cv2.drawContours(im, contours, -1, (0,255,0), 3)
    cv2.drawContours(im, contours, 3, (0,255,0), 3)
    cnt = contours[4]
    cv2.drawContours(im, [cnt], 0, (0,255,0), 3)
    
    # 等待键盘输入
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    pic

    得到的结果是黑的... 所以我想知道如何获取这个道路的位置。~

    pic2

    16 条回复    2017-11-04 01:34:46 +08:00
    justou
        1
    justou  
       2017-11-02 22:20:13 +08:00
    你是想把道路给分割出来么?
    anmaz
        2
    anmaz  
       2017-11-02 22:25:19 +08:00 via Android
    色差没调好,你能二维化出来什么?
    shijingshijing
        3
    shijingshijing  
       2017-11-02 22:49:24 +08:00   ❤️ 1
    你这个要 RGB 三个通道分离后做阈值处理,从路的颜色与其他物体(草地,石头等)不一样这个思路入手
    hunk
        4
    hunk  
       2017-11-02 22:50:59 +08:00
    大胆猜测下,这要是做外挂吗?
    wcsjtu
        5
    wcsjtu  
       2017-11-02 23:13:30 +08:00
    阈值不对? 实在不行腐蚀膨胀一下再提取

    。。。。。。
    其实我是瞎 bb 的-.-!
    zhusimaji
        6
    zhusimaji  
       2017-11-02 23:24:24 +08:00 via iPhone
    你这是通过找连通域来定位路,这个可以,但是你二值化应该有问题。可以尝试边缘检测定位路,常见的道路检测也是这个原理。从计算机视觉跳到大数据,好久不弄快忘记了
    wdlth
        7
    wdlth  
       2017-11-02 23:38:11 +08:00 via Android
    可以用直方图均衡把图片对比度弄高点,通过连通区域检测,应该可以分离出几处独立的区域。
    silencefent
        8
    silencefent  
       2017-11-03 09:13:58 +08:00
    暗黑三诶?
    woshichuanqilz
        9
    woshichuanqilz  
    OP
       2017-11-03 10:21:09 +08:00
    @justou 对的是要分离道路。
    woshichuanqilz
        10
    woshichuanqilz  
    OP
       2017-11-03 10:21:35 +08:00
    @anmaz 谢谢 我看下怎么调色差。
    woshichuanqilz
        11
    woshichuanqilz  
    OP
       2017-11-03 10:22:18 +08:00
    @shijingshijing 其实我觉得就是找出路的颜色然后在图里面做对比是比较好的。 但是不知道怎么做。
    woshichuanqilz
        12
    woshichuanqilz  
    OP
       2017-11-03 10:23:04 +08:00
    @hunk 自己玩的, 最近玩了玩暗黑 2, 点鼠标太累了, 就想电脑能不能做, 自己娱乐用的, 做外挂要是我这个技术也不用干了 : D
    woshichuanqilz
        13
    woshichuanqilz  
    OP
       2017-11-03 10:23:35 +08:00
    @wcsjtu ~~ 我试下, 主要这个不怎么懂, 就看了一下午教程一头雾水哈哈
    woshichuanqilz
        14
    woshichuanqilz  
    OP
       2017-11-03 11:18:42 +08:00
    @zhusimaji 谢谢 我再研究一下边缘检测
    @wdlth 好的 谢谢
    zhusimaji
        15
    zhusimaji  
       2017-11-03 11:42:19 +08:00
    @wdlth
    @woshichuanqilz
    类似图像增强的方法都可以考虑
    NoAnyLove
        16
    NoAnyLove  
       2017-11-04 01:34:46 +08:00
    转成 gray 之后保存下来,用类似 PS 的软件打开,可以看到路的颜色范围其实比较大,而且范围和其他区域有重叠,所以直接用 threshold 的效果不太好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2196 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 02:12 · PVG 10:12 · LAX 19:12 · JFK 22:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.