• 请不要在回答技术问题时复制粘贴 AI 生成的内容
vertigo
V2EX  ›  程序员

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

  •  
  •   vertigo ·
    lidamaoHub · Jun 25, 2020 · 6585 views
    This topic created in 2325 days ago, the information mentioned may be changed or developed.

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

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

    Supplement 1  ·  Jun 25, 2020
    新增一个难度,如果截取后不固定比例拉伸,有没有办法


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

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

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

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

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

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

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

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

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

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

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