精华内容
下载资源
问答
  • 2020-02-28 11:31:37

    前面学习过模板识别的函数,也演示过它的使用,但是还是不少学生来问我能不能用它来开发游戏的外挂,我的回答应该是肯定的。因为游戏是一种图形的展示,使用窗口的方法来识别已经不可能,根据位置识别只能固定的目标,比如移动的妖怪,要想杀它,必须把它不断移动的位置找到,然后在那里点击鼠标的动作。要实现这个过程,要先使用操作系统的功能,实现抓屏,比如抓屏的内容如下图:

    这个就游戏的屏幕内容了,现在我们找一个目标,比如要找到上图里两个问号的位置,以便角色可以到那里碰触它。在这里就遇到问题了,就是怎么样找到问号所在的位置,因为游戏里物体的位置不断地变化的。这时就需要使用OpenCV里提供的模板识别的功能,当然要使用这个功能之前,你得把游戏运行一下,把需要的界面保存起来,然后再从这些图片截取你需要的小图片,这些小图片,就是需要查找的模板。比如这里,我截取的小图片如下:

    更多相关内容
  • 极验点选验证码位置识别(一):点选验证码位置识别技术总览 声明 一、技术栈 1. 验证码图片下载 2. 验证码图片预处理 3. 标签图分割 4. 背景图图标标注 5. 背景图图标训练&识别 5. siamese network模型训练 6. ...

    声明

    原创文章,请勿转载!

    本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。

    本文关联文章超链接:

    1. 极验点选验证码位置识别(一):点选验证码位置识别技术总览

    近期文章更新会慢一些,工作有些忙,再加上点选的识别数据集要重新做处理。太难了。
    说多了都是泪,本来极验点选上个月已经破解了,准备写文章的,然后就先写了极验滑块系列的文章。回头一看点选的,卧槽,验证码图片更新了,得重新调整解决方案了。
    在这里插入图片描述

    一、技术栈

    不管是极验还是其他厂家的点选验证码,都是一样的。首先要做的就是得到验证码中图标的位置顺序信息。有了这两样,点选验证码不就和之前介绍的滑块验证码一样了吗,只需要破解对鼠标轨迹进行加密的js就行了。
    本系列文章以极验为例,讲解整个点选验证码的识别到js破解的过程,小伙伴们耐心看完。

    1. 验证码图片下载

    因为后期会用到图片识别技术,所以需要下载大量的图片验证码,用作训练集。
    在这里插入图片描述

    2. 验证码图片预处理

    将验证码图片分割成背景图和标签图,并分别做一系列预处理,提高后期图片识别准确率。
    在这里插入图片描述

    3. 标签图分割

    标签图是我们要点击的图形验证码顺序,首先要将标签图中每个标签分离出来。可以看到每个标签之间还有粘连在一起的部分,因此此步骤需要用openCV对标签做图像边缘检测、分离技术。
    在这里插入图片描述

    4. 背景图图标标注

    使用labelImg工具对背景图中的待检测图标进行标注,生成训练集。
    在这里插入图片描述

    5. 背景图图标训练&识别

    本系列文章采用yolo5目标检测模型,检测出背景图中的图标。
    在这里插入图片描述

    5. siamese network模型训练

    采用孪生神经网络模型训练第4步骤(背景图图标)和第3步骤(标签图图标)图片的相似度。

    6. 相似度结果解析

    对第5步骤返回的结果,对相似度进行排序,得到点选验证码的顺序和坐标。
    在这里插入图片描述

    二、结语

    友情链接:极验点选验证码位置识别(二):验证码图片下载&数据集预处理(还未更新)

    本期文章结束啦,如果对您有帮助,记得收藏加关注哦,后期文章会持续更新 ~~~

    在这里插入图片描述

    展开全文
  • 使用Opencv实现魔方识别(一):边缘及位置识别

    千次阅读 多人点赞 2019-08-03 20:29:39
    本文将描述如何使用Opencv识别从摄像头抓取的魔方图片内魔方的各个方块边缘以及位置,用于后续的颜色的识别。 安装opencv Pycharm支持从界面选择安装python包,在文件菜单下选择设置项,然后如下图找到安装界面: ...

    之前做魔方机器人,使用的是人工输入默认的各个表面方块颜色分布,不够方便与智能,因此开始研究使用摄像头识别魔方。Opencv基本是首选而且方便简单的工具。本文将描述如何使用Opencv识别从摄像头抓取的魔方图片内魔方的各个方块边缘以及位置,用于后续的颜色的识别。

    安装opencv

    Pycharm支持从界面选择安装python包,在文件菜单下选择设置项,然后如下图找到安装界面:
    在这里插入图片描述
    需要用到的安装包列表:numpy,Matplotlib,opencv-python

    边缘检测

    从摄像头抓取的原图如下:
    在这里插入图片描述

    灰化去除颜色信息

    代码:

    import cv2
    import numpy as np
    from copy import deepcopy
    import math
    
    imgobj = cv2.imread('1.jpg')
    gray = cv2.cvtColor(imgobj, cv2.COLOR_BGR2GRAY)
    cv2.namedWindow("image")
    cv2.imshow("image", gray)
    cv2.waitKey(0)
    

    效果如下:
    在这里插入图片描述

    高斯模糊扩大边缘效果

    代码:

    blurred = cv2.GaussianBlur(gray, (3, 3), 0)
    cv2.imshow("image", blurred)
    cv2.waitKey(0)
    

    效果如下:
    在这里插入图片描述

    Canny算法实现边缘检测

    Canny边缘检测是一种非常流行的边缘检测算法,是John Canny在1986年提出的。具体可以参考:
    https://en.wikipedia.org/wiki/Canny_edge_detector

    代码:

    canny = cv2.Canny(blurred, 20, 40)
    cv2.imshow("image", canny)
    cv2.waitKey(0)
    

    效果如下:
    在这里插入图片描述

    边缘线膨胀化

    canny检测的边缘线很细,使得同一边缘有多个边缘线,这里可以用opencv dilate函数,使边缘线膨胀化,这样同一边缘的多个边缘线即可合并成同一条线。

    代码:

    kernel = np.ones((3,3), np.uint8)
    dilated = cv2.dilate(canny, kernel, iterations=2)
    cv2.imshow("image", blurred)
    cv2.waitKey(0)
    

    效果如下:
    在这里插入图片描述

    去除多余边缘

    膨胀化后,可以看到很多魔方外的物体边缘,以及魔方内的小边缘,这些都需要去除。通过计算闭合边缘的面积以及中心点的位置,可以判断出哪些是魔方的边缘,哪些是多余的边缘。
    在计算面积与中心点时,需要对闭合边缘使用approxPolyDP函数进行多变拟合。findContours为遍历提取所有的闭合区域,arcLength为计算闭合区域的周长,contourArea计算闭合区域的面积。
    代码:

    (contours, hierarchy) = cv2.findContours(dilated.copy(),
                                             cv2.RETR_TREE,
                                             cv2.CHAIN_APPROX_SIMPLE)
    
    
    candidates = []
    hierarchy = hierarchy[0]
    
    index = 0
    pre_cX = 0
    pre_cY = 0
    center = []
    for component in zip(contours, hierarchy):
        contour = component[0]
        peri = cv2.arcLength(contour, True)
        approx = cv2.approxPolyDP(contour, 0.1 * peri, True)
        area = cv2.contourArea(contour)
        corners = len(approx)
    
        # compute the center of the contour
        M = cv2.moments(contour)
    
        if M["m00"]:
            cX = int(M["m10"] / M["m00"])
            cY = int(M["m01"] / M["m00"])
        else:
            cX = None
            cY = None
    
        if 14000 < area < 20000 and cX is not None:
            tmp = {'index': index, 'cx': cX, 'cy': cY, 'contour': contour}
            center.append(tmp)
            index += 1
    
    center.sort(key=lambda k: (k.get('cy', 0)))
    row1 = center[0:3]
    row1.sort(key=lambda k: (k.get('cx', 0)))
    row2 = center[3:6]
    row2.sort(key=lambda k: (k.get('cx', 0)))
    row3 = center[6:9]
    row3.sort(key=lambda k: (k.get('cx', 0)))
    
    center.clear()
    center = row1 + row2 + row3
    
    for component in center:
        candidates.append(component.get('contour'))
    
    cv2.drawContours(imgobj, candidates, -1, (0, 0, 255), 3)
    cv2.imshow("image", imgobj)
    cv2.waitKey(0)
    

    效果如下:
    在这里插入图片描述
    通过效果图,对于魔方的边缘及位置识别基本正确,后续即可对识别区域内的颜色进行分析,会在后续文章中进行。

    展开全文
  • opencv实现简单手指位置识别

    千次阅读 2017-06-19 22:21:39
    整体思路:1.过滤噪声2.由于RGB颜色的离散性转换为HSV通道3.对HSV空间进行量化,得到2值图像,亮的部分为手的形状4.去除杂点造成的伪轮廓,留下手的真实轮廓5.对凸出点连线6....将MFC实现部分给省略了,给出了完整的...
    整体思路:
    
    1.过滤噪声
    
    2.由于RGB颜色的离散性转换为HSV通道
    
    3.对HSV空间进行量化,得到2值图像,亮的部分为手的形状
    
    4.去除杂点造成的伪轮廓,留下手的真实轮廓
    
    5.对凸出点连线
    
    6.最高点到底部中点的连线即为手指方向
    
    //部分代码:
    将MFC实现部分给省略了,给出了完整的opencv部分代码,可以参考实现。
    int main()
    {
        cv::VideoCapture cap(0);
        if (!cap.isOpened())
        {
            return -1;
        }
        //
        cv::Mat frame;
        cv::Mat frameHSV;
        //
        std::vector< std::vector<cv::Point> > OriginalContours;//轮廓
        std::vector< cv::Vec4i > hierarchy; // 轮廓的结构信息
        //
        std::vector< std::vector<cv::Point> > FinalContours;// 筛选后的轮廓
        std::vector< cv::Point > hull;  // 凸包络的点集
        //
        CString Str;
        int i, j;
        int Width = cap.get(CV_CAP_PROP_FRAME_WIDTH), Height = cap.get(CV_CAP_PROP_FRAME_HEIGHT);
        float fHeight = ((float)2 / 3 - (float)1 / 7) * Height;
        //
        while (0 == pDlg->m_bStopFlag)
        {
            cap >> frame;
            if (frame.empty())
            {
                break;
            }
            //左右翻转
            cv::flip(frame, frame, 1);
            //中值滤波,用了这个下面的其他滤波全部异常
            //medianBlur(frame, frame, 10);
            //高斯滤波
            cv::GaussianBlur(frame, frame, cv::Size(7, 7), 1.5, 1.5);
            //通道转换
            cv::cvtColor(frame, frameHSV, CV_BGR2HSV);
            //imshow("frameHSV", frameHSV);
            /*
            S = 符号整型  U = 无符号整型  F = 浮点型
            E.g.:
            CV_8UC1 是指一个8位无符号整型单通道矩阵,
            CV_32FC2是指一个32位浮点型双通道矩阵
            CV_8UC1          CV_8SC1          CV_16U C1       CV_16SC1
            CV_8UC2          CV_8SC2          CV_16UC2        CV_16SC2
            CV_8UC3          CV_8SC3          CV_16UC3        CV_16SC3
            CV_8UC4          CV_8SC4          CV_16UC4        CV_16SC4
            CV_32SC1         CV_32FC1         CV_64FC1
            CV_32SC2         CV_32FC2         CV_64FC2
            CV_32SC3         CV_32FC3         CV_64FC3
            CV_32SC4         CV_32FC4         CV_64FC4
            */
            // 对HSV空间进行量化,得到2值图像,亮的部分为手的形状
            cv::Mat mask(frame.rows, frame.cols, CV_8UC1);
            //inRange(frameHSV, cv::Scalar(0, 30, 30), cv::Scalar(40, 170, 256), mask);
            inRange(frameHSV, cv::Scalar(5, 30, 30), cv::Scalar(40, 170, 256), mask);
            //
            // 腐蚀:去除小亮点 膨胀:连接区块
            cv::erode(mask, mask, cv::Mat(5, 5, CV_8U), cv::Point(-1, -1), 1);
            //cv::dilate(mask, mask, cv::Mat(5, 5, CV_8U), cv::Point(-1, -1), 2);
            //imshow("frameHSV", frameHSV);
            //imshow("mask", mask);
            OriginalContours.clear();
            hierarchy.clear();
            FinalContours.clear();
            // 得到手的轮廓
            cv::findContours(mask, OriginalContours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
            // 去除伪轮廓
            for (i = 0; i < OriginalContours.size(); i++)
            {
                if (fabs(cv::contourArea(cv::Mat(OriginalContours[i]))) > 25000)
                {
                    FinalContours.push_back(OriginalContours[i]);
                }
            }
            // 画轮廓
            cv::drawContours(frame, FinalContours, -1, cv::Scalar(0, 0, 255), 3);
            // 得到轮廓的凸包络
            int hullcount;
            int iNumOfContours = FinalContours.size();
            cv::Point top;
            for (j = 0; j < iNumOfContours; j++)
            {
                convexHull(cv::Mat(FinalContours[j]), hull, true);
                hullcount = (int)hull.size();
                //
                for (i = 0; i<hullcount - 1; i++)
                {
                    cv::line(frame, hull[i + 1], hull[i], cv::Scalar(255, 0, 0), 2, CV_AA);
                }
                cv::line(frame, hull[hullcount - 1], hull[0], cv::Scalar(255, 0, 0), 2, CV_AA);
                //画点
                GetTopPoint(hull, hullcount, top);
                cv::line(frame, top, top, cv::Scalar(255, 0, 255), 18, CV_AA);
                cv::line(frame, top, cv::Point(Width/2, Height), cv::Scalar(0, 255, 255), 2, CV_AA);
                //
                if (1 == iNumOfContours)
                {
                    pDlg->m_FingerPosition.bChanged = 1;
                    pDlg->m_FingerPosition.top = ((float)top.y - (float)Height / 7) / fHeight;
                    pDlg->m_FingerPosition.left = (float)top.x / (float)Width;
                }
            }
            //
            cv::line(frame, cv::Point(0, Height / 7), cv::Point(Width, Height / 7), cv::Scalar(255, 255, 255), 2, CV_AA);
            cv::line(frame, cv::Point(0, 2 * Height / 3), cv::Point(Width, 2 * Height / 3), cv::Scalar(255, 255, 255), 2, CV_AA);
            imshow("frame", frame);
            cv::waitKey(33);
        }
        return 0;
    }

    实验效果图
    这里写图片描述

    展开全文
  • 1. 位置识别是回环检测的重要组成部分 回环检测包括可以两部分:外观识别(位置识别)与几何识别(误匹配剔除,如RANSAC) 位置识别,即外观验证,通过图像间的相似度信息进行判断; 几何验证,通过回环候选帧与当前...
  • 最近在做一个围棋棋盘棋子识别项目,这是该项目第二篇,第一篇见:1、基于python及图像识别的围棋棋盘棋子识别1——定位棋盘位置 , 基于python及图像识别的围棋棋盘棋子识别2——定位棋子位置识别棋子颜色1、将...
  • 识别滑块缺口位置

    千次阅读 2019-08-30 01:15:24
    今天我要做的就是识别大部分滑块的缺口位置。 开始 现在的滑块缺口基本分为两种,一种是极验系的,提供原图和带缺口的背景图,另一种就是只有滑块图片和带缺口的背景图,网易系。 先感受一下它们的图片风格 极验系: ...
  • Python-Opencv 识别滑块验证码缺口位置

    千次阅读 2022-01-20 11:13:23
    Python-Opencv 识别滑块验证码缺口位置 本章非常简单,就是放图片放源码,开篇即用,小伙伴只需要针对需要破解的验证码改一下参数就行,这边太复杂的除外 这是我的验证码 以下是代码和结果 import cv2 import base...
  • 讲解加速度传感器(LIS3DH)的工作原理和应用,如静止运动检测、失重检测、手机翻转识别、位置识别等等。
  • 回环检测的关键在于重新识别到同一个地方,这块领域被称为位置识别(Place Recognition)。 此文主要总结大视角变化和场景变化中的位置识别位置识别中的一些概念 位置识别模块分为三个部分:图像处理部分;已知...
  • pytesseract识别中文并且获得识别的字符的位置信息,识别中文随便找找就能找到相关资料,但是获得位置信息的中文资料有点少呀,下面通过学习这个获得了怎么得到位置信息的方法了。总体来说有两个方法。一个是image_...
  • 先说说神箭手的情况吧,这个问题我们很久之前就开始研究了,一直期待能做到一个优秀的效果,就像友商@Jerry黄大仙 说的一样,新闻场景中的正文标题识别确实是相对好做的,可以直接hard coding一些特征。因为新闻标题...
  • 滑块验证码的识别

    千次阅读 2021-11-10 15:30:08
    滑块验证码的识别前言一、滑块验证码的形式二、采用的方法1.滑块图、背景图切分2.模板匹配总结 前言 最近在一个比价的公司实习,公司里面主要使用爬虫来获取一件商品在其他平台的价格。但是在大部分的时候别的平台...
  • Lis3dh有两种工作方式,一种是其内置了多种算法来处理常见的应用场景(如静止检测、运动检测、屏幕翻转、失重、位置识别、单击和双击等等),用户只需简单配置算法对应的寄存器即可开始检测,一旦检测到目标事件,...
  • 使用opencv识别物体的位置,找到中心点位: 步骤:先拿到图像-->进行高斯滤波-->进行灰度处理-->进行二值化-->进行开运算-->轮廓提取-->计算中心点位 效果图如下: 代码如下: import cv2 ...
  • 【图片识别】滑块缺口定位

    千次阅读 多人点赞 2021-11-15 10:07:50
    刚好array里的数值是20位,并且是从原点位置开始,吧当前切片移动到array对应的位置,大于9的会进入下一行 然后通过opencv对图片进行剪切拼接,即可得到原图 三、缺口定位 图片还原后,由于缺口位置有一个明显的矩形...
  • 极验第四代滑块验证码破解(二):滑块缺口识别声明 声明 原创文章,请勿转载! 本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。 本文关联文章超链接:
  • Python识别图片指定区域文字内容

    万次阅读 多人点赞 2019-02-27 17:08:05
    Python批量识别图片指定区域文字内容简介所需Python模块Python代码 简介 对于一张图片,需求识别指定区域的内容 截取原始图上的指定图片当做模板 根据模板相似度去再原始图片上识别...用于识别模板再原始图的位置坐...
  • 二维码识别的原理?

    千次阅读 2020-07-07 08:40:25
    点击上方“3D视觉工坊”,选择“星标”干货第一时间送达整理:公众号@图像处理与计算机视觉本文仅做学术分享,如有侵权,请联系删除。二维码的特征定位和信息识别背景介绍视觉的方法可以用来估计位...
  • 识别图片地点_地点识别

    千次阅读 2020-07-20 05:19:40
    识别图片地点Imagine this scenario: you catch-up with a friend who’s returned from a trip to India. You’ve traveled extensively through India and recommended your friend to holiday there. When you ...
  • OpenCV识别图形以及常用函数处理

    千次阅读 2019-07-07 20:34:35
    因此可以用来人脸识别、图形识别、文字识别等等。对于复杂一点识别的可能还涉及到大量的识别训练,最后的匹配比较分类等等。后续可能会介绍文字识别、人脸识别等等。 图形识别 图形识别指的是对常见的几何图形进行...
  •   二维码识别作为一种快捷准确的技术已经应用与生活中的购物支付、物体识别及工业AGV导航等领域,在OpenCV3.4.4版本上均提供了相应的函数cv::QRCodeDetector::detectAndDecode()用于二维码的检测和解析,但是在ROS...
  • python实现批量图片文字识别(ocr)

    千次阅读 2021-07-30 07:52:47
    最近有ocr方面的需求,而且是批量的,python能不能干这么件事呢,肯定是可以的,...'''使用时只需要修改百度智能云接口,位于baiduOCR函数,和图片存放位置,位于倒数第三行''' def baiduOCR(outfile): """利用百度ap
  • 利用python-opencv对LED数码管显示数字进行有效识别

    千次阅读 热门讨论 2020-07-17 13:06:34
    因为项目原因,现在要搞一个LED数码管的数字识别识别包含各种各样的数码管,需要做通用匹配的文件,主要是利用opencv的的函数调用,并结合段式数码管的发光物理特性进行有效识别。 在项目中因为需要匹配各种各样...
  • 这里扩展了一个小程序(识别一张棋盘图片,利用角点检测得到棋盘参数,再利用形状提取得到棋子位置,将棋盘图片转换成矩阵,再利用棋子圆心的RGB识别,用矩阵中的1表示黑子,0表示白子。“后面会把这个小扩展单独写...
  • 图像处理之目标检测与识别

    千次阅读 2020-07-07 16:30:13
    区别:目标检测是用来确定...但是这种特征会受到两个方面的影响:尺度问题、位置问题,为了解决这些问题,需要使用图像金字塔和滑动窗口。 图像金字塔 是图像的多尺度表示 滑动窗口 通过一个滑动窗口扫描较大图像的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 648,229
精华内容 259,291
关键字:

位置识别