首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vertigo
V2EX  ›  程序员

[巨型难题] 如何通过 Python ,确定图片剪裁位置

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

    如图,当有两张图,左边为源文件,右边为剪裁(且等比拉伸)后的图片 对比图

    请问如何通过程序来判断右图位于左图什么位置(例如返回四个角坐标)

    第 1 条附言  ·  40 天前
    新增一个难度,如果截取后不固定比例拉伸,有没有办法


    如果有大佬有方案,也可以付费获取方案 邮箱 bGlkYW1hb0BkaWFuZ2V6YW4ubWU=
    45 条回复    2020-06-26 13:02:02 +08:00
    gwy15
        1
    gwy15   40 天前   ❤️ 2
    SIFT, SURF, etc.
    hackpro
        2
    hackpro   40 天前 via iPad
    YOLO
    vicsun2020
        3
    vicsun2020   40 天前 via iPhone
    都导入成 rgb 数组然后写循环判断成不成😂😂
    是不是太土了,楼上都是现成的库吗
    vertigo
        5
    vertigo   40 天前
    @vicsun2020 土完全没关系,能解决问题即可,但是不知道拉伸是否会增加 rgb 色块。。。(我没有搞过图像内容)
    vertigo
        6
    vertigo   40 天前
    @gwy15
    @hackpro
    @TtiGeR
    谢谢楼上大神,我先去康康学习一个
    lithbitren
        7
    lithbitren   40 天前
    涉及拉伸用循环大概率是不行的,最好还是用现成的模糊匹配库
    xmoiduts
        8
    xmoiduts   40 天前 via Android
    hog 特征+滑动窗口匹配?(我瞎猜的 最近被 hog 折磨得不行……)
    vertigo
        9
    vertigo   40 天前
    @xmoiduts 关键是不知道裁剪后拉伸多少
    vertigo
        10
    vertigo   40 天前
    对了,如果有大佬有方案,也可以付费 邮箱 bGlkYW1hb0BkaWFuZ2V6YW4ubWU=
    imn1
        11
    imn1   40 天前   ❤️ 1
    右图不存在的话是个难题,右图已存在的话是个送分题,不对,送钱题

    主要问题是程序不知道你要抠什么
    ctolib
        12
    ctolib   40 天前 via Android
    你看一下,模板匹配算法是不是可以解决你的问题
    tiancaixiaoshuai
        13
    tiancaixiaoshuai   40 天前   ❤️ 1
    以后从网上找素材可要小心了,一定要确定好版权问题。

    资源站又多了一个发财致富的路:批量扫全网网站,匹配图片,发送律师函,$$$cha-ching !
    TimePPT
        14
    TimePPT   40 天前 via Android
    六年前在某视频网站做过视频自动抽帧截图做封面,当时上了机器学习做重点内容区域识别(不用识别具体实体是啥)。大概一千张的成对训练集就能做到很好的效果。

    现在估计有更好的算法实现了。
    JCZ2MkKb5S8ZX9pq
        15
    JCZ2MkKb5S8ZX9pq   40 天前
    cv2 ?好像网易那个测试工具就有全屏找图返坐标的,现成端口,我记得是返中心点。
    zmlu
        16
    zmlu   40 天前 via iPhone
    OpenCV
    vertigo
        17
    vertigo   40 天前
    @JCZ2MkKb5S8ZX9pq 网易有现成的么?请问还记得叫什么嘛
    vertigo
        18
    vertigo   40 天前
    @tiancaixiaoshuai 兄弟这是啥啊..
    vertigo
        19
    vertigo   40 天前
    @ctolib 关键是我不会算法,就很尴尬,所以才来问是否有现成的模块可以用
    JCZ2MkKb5S8ZX9pq
        20
    JCZ2MkKb5S8ZX9pq   40 天前
    [Airtest Project]( http://airtest.netease.com/)

    我用 python 试过,嫌参数太复杂了,后来写了个别的。
    JCZ2MkKb5S8ZX9pq
        21
    JCZ2MkKb5S8ZX9pq   40 天前
    @vertigo 但你的需求不知道合不合适用它这个,它是个测试框架。可以翻翻它的 github,感觉可能就是 cv2 。
    cnt2ex
        22
    cnt2ex   40 天前
    相关滤波算法

    尺度可以把图片变换到 logpolar 空间估计
    cnt2ex
        23
    cnt2ex   40 天前
    其实还可以用目标检测的方法。直接用深度学习的那堆模型检测两个图片中物体的坐标 x,y,w,h,再用模板匹配。
    vertigo
        24
    vertigo   40 天前
    @JCZ2MkKb5S8ZX9pq 卧槽牛逼
    vertigo
        25
    vertigo   40 天前
    @cnt2ex 去哪里可以找到玩过这些算法的老哥呢
    tiancaixiaoshuai
        26
    tiancaixiaoshuai   40 天前
    @vertigo $是美元,代表钱,cha-ching 是模仿收银机的声音,代表钱进账

    很多网站的图片素材都是从网上找的,然后把原图切一下拉到合适的尺寸自己用,或者就是单纯的截一部分,假装跟原图不一样。从网上找到的图片所在网站本身可能就是盗的图,并不能以此确定这张图片是否可以商用,如果使用了这种图片,被原创者发现,就要交钱(版权费)

    那么,一些做图片资源的网站,例如某觉中国,使用了你说的这个技术,批量扫描全网的网站,把图片拿来跟自己的数据库对比,找出盗图的网站、相关图片、以及相关图片截取了自己图片的哪个位置,发送律师函,收钱
    SharkU
        27
    SharkU   40 天前
    @tiancaixiaoshuai 有道理
    jmc891205
        28
    jmc891205   40 天前 via iPhone
    与 scale 和 rotation 无关的 template matching 算法
    你预算多少?
    dick20cm
        29
    dick20cm   40 天前
    与 scale 和 rotation 无关的 template matching 算法,简单的一批
    ctolib
        30
    ctolib   40 天前 via Android
    @vertigo 网上搜索一下模板匹配算法 一堆的示例代码。
    vertigo
        31
    vertigo   40 天前
    @ctolib 好的谢谢老板
    cz5424
        32
    cz5424   39 天前 via iPhone
    做过类似的需求,来确定视频中水印位置,用得是 opencv 的 SIFT
    supermoonie
        33
    supermoonie   39 天前
    @vertigo 我有一个 OpenCV 的群,群主是贾志刚,51CTO 里的讲师,需要的话,我可以帮你
    gorillazksl
        34
    gorillazksl   39 天前
    没有 scale 和 rotation @TtiGeR 的 link 就能 work.
    有 scale 和 rotation, 先用 SIFT(总的来说 SIFT 还是所有 Feature detection 方法里对所有情况平均性能最好的,如果有速度的要求可以用 SURF 之类的) match 一些 point 再根据这些 point 估计 scale 和 rotate 的参数 然后再用 @TtiGeR 的 link 就行
    CoCoMcRee
        35
    CoCoMcRee   39 天前
    模糊匹配, 很好奇你是想用在什么场景下.

    我之前也游戏脚本时用过这个.
    imn1
        36
    imn1   39 天前
    右图存在的话,就几行而已

    def compTmpl(image, target):
    img_rgb = cv2.imread(image)
    img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
    template = target
    w, h = template.shape[::-1]
    res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
    threshold = 0.9
    loc = numpy.where( res >= threshold)
    return loc

    threshold 是临界值,自己按需要调整
    gorillazksl
        37
    gorillazksl   39 天前
    @imn1 Opencv 的 matchTemplate 是没有考虑到 scale 和 rotation 的 所以只有在没有 scale 和 rotation 的前提下才会比较 work
    nightwitch
        38
    nightwitch   39 天前
    右图是已知的,或者有近似的模板,搜关键词 模板匹配(template matching)
    如果你只有左图,想从中扣出一些物体所在的区域,搜关键词 目标检测, 比较容易的( FRNN, YOLOv3)
    imn1
        39
    imn1   39 天前
    @gorillazksl #37
    如果尺寸相差不太大,还是可以的
    我经常用这招找图,在图 1 中随机在图中心附近画一个不太大矩形,然后用这个矩形去一堆图里面找(尺寸不同,但基本接近),输出匹配,比起 imgHash 更好使,因为 imgHash 在:
    1.出现比较大幅的裁边,或者加厚框
    2.比例相差大
    3.大水印
    这些情况,不容易匹配上
    重点是最终我还是要肉眼判定,程序只是找出来而已,纯自动化我心还没那么大

    至于旋转,看需求可以添加代码,cv2 就是个矩阵而已,平常没必要想太多,毕竟人眼不能旋转看图,大部分情况两幅图是同向的,旋转的情况不多
    cht1995
        40
    cht1995   39 天前
    SIFT 正解
    poringking
        41
    poringking   39 天前
    这个问题叫 direct image alignment,如果不改变比例,那参数就是平移,2 个自由度,如果改变比例,那再加两个自由度,可以用 lucas kanade 算法,用其中的 inverse compositional lk 最快,只用算 template 的 jacobian 。
    lunafreya
        42
    lunafreya   39 天前 via iPhone
    专业 cv 人来答一下,这个非常简单,不需要高级操作。你只需要找到几个对应点的位置(你的仿射变换有几个自由度就找几个点),然后算出仿射变换的参数即可。
    RadishWind
        43
    RadishWind   39 天前
    opencv 的 template 匹配,之前做脚本的时候玩过
    ctro15547
        44
    ctro15547   39 天前
    如果只是以图找图的话 opencv 就行。百度下几行代码的事情。
    gargar
        45
    gargar   39 天前
    有些情况不太好确定四角坐标:
    抠出的图是不规则区域;
    由原图多个部分拼接的。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2936 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:55 · PVG 21:55 · LAX 06:55 · JFK 09:55
    ♥ Do have faith in what you're doing.