精华内容
下载资源
问答
  • hammer.js移动端图片手指缩放插件

    千次下载 热门讨论 2015-07-22 22:58:30
    手机移动端手指缩放图片的插件hammer.js
  • android 用自定义View的方式实现了两个手指放大和缩小图片
  • 一文读懂PID控制算法(抛弃公式,从原理真正理解PID控制) PID控制应该算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。这里我们从原来上来...

    一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)

    PID控制应该算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。这里我们从原理上来理解PID控制。
    PID(proportion integration differentiation)其实就是指比例,积分,微分控制。先把图片和公式摆出来,看不懂没关系。(一开始看这个算法,公式能看懂,具体怎么用怎么写代码也知道,但是就是不知道原理,不知道为什么要用比例,微分,积分这3个项才能实现最好的控制,用其中两个为什么不行,用了3个项能好在哪里,每一个项各有什么作用

    PID控制算法原理

    PID控制算法公式

    总的来说,当得到系统的输出后,将输出经过比例,积分,微分3种运算方式,叠加到输入中,从而控制系统的行为,下面用一个简单的实例来说明。

    比例控制算法

    我们先说PID中最简单的比例控制,抛开其他两个不谈。还是用一个经典的例子吧。假设我有一个水缸,最终的控制目的是要保证水缸里的水位永远的维持在1米的高度。假设初试时刻,水缸里的水位是0.2米,那么当前时刻的水位和目标水位之间是存在一个误差的error,且error为0.8.这个时候,假设旁边站着一个人,这个人通过往缸里加水的方式来控制水位。如果单纯的用比例控制算法,就是指加入的水量u和误差error是成正比的。即
    u=kp*error
    假设kp取0.5,
    那么t=1时(表示第1次加水,也就是第一次对系统施加控制),那么u=0.5*0.8=0.4,所以这一次加入的水量会使水位在0.2的基础上上升0.4,达到0.6.
    接着,t=2时刻(第2次施加控制),当前水位是0.6,所以error是0.4。u=0.5*0.4=0.2,会使水位再次上升0.2,达到0.8.
    如此这么循环下去,就是比例控制算法的运行方法。
    可以看到,最终水位会达到我们需要的1米。
    但是,单单的比例控制存在着一些不足,其中一点就是 –稳态误差!(我也是看了很多,并且想了好久才想通什么是稳态误差以及为什么有稳态误差)。
    像上述的例子,根据kp取值不同,系统最后都会达到1米,不会有稳态误差。但是,考虑另外一种情况,假设这个水缸在加水的过程中,存在漏水的情况,假设每次加水的过程,都会漏掉0.1米高度的水。仍然假设kp取0.5,那么会存在着某种情况,假设经过几次加水,水缸中的水位到0.8时,水位将不会再变换!!!因为,水位为0.8,则误差error=0.2. 所以每次往水缸中加水的量为u=0.5*0.2=0.1.同时,每次加水缸里又会流出去0.1米的水!!!加入的水和流出的水相抵消,水位将不再变化!!
    也就是说,我的目标是1米,但是最后系统达到0.8米的水位就不在变化了,且系统已经达到稳定。由此产生的误差就是稳态误差了。
    (在实际情况中,这种类似水缸漏水的情况往往更加常见,比如控制汽车运动,摩擦阻力就相当于是“漏水”,控制机械臂、无人机的飞行,各类阻力和消耗都可以理解为本例中的“漏水”)
    所以,单独的比例控制,在很多时候并不能满足要求。

    积分控制算法

    还是用上面的例子,如果仅仅用比例,可以发现存在暂态误差,最后的水位就卡在0.8了。于是,在控制中,我们再引入一个分量,该分量和误差的积分是正比关系。所以,比例+积分控制算法为:
    u=kp*error+ ki ∗ ∫ error
    还是用上面的例子来说明,第一次的误差error是0.8,第二次的误差是0.4,至此,误差的积分(离散情况下积分其实就是做累加), error=0.8+0.4=1.2. 这个时候的控制量,除了比例的那一部分,还有一部分就是一个系数ki乘以这个积分项。由于这个积分项会将前面若干次的误差进行累计,所以可以很好的消除稳态误差(假设在仅有比例项的情况下,系统卡在稳态误差了,即上例中的0.8,由于加入了积分项的存在,会让输入增大,从而使得水缸的水位可以大于0.8,渐渐到达目标的1.0.)这就是积分项的作用。

    微分控制算法

    换一个另外的例子,考虑刹车情况。平稳的驾驶车辆,当发现前面有红灯时,为了使得行车平稳,基本上提前几十米就放松油门并踩刹车了。当车辆离停车线非常近的时候,则使劲踩刹车,使车辆停下来。整个过程可以看做一个加入微分的控制策略。
    微分,说白了在离散情况下,就是error的差值,就是t时刻和t-1时刻error的差,即u=kd*(error(t)-error(t-1)),其中的kd是一个系数项。可以看到,在刹车过程中,因为error是越来越小的,所以这个微分控制项一定是负数,在控制中加入一个负数项,他存在的作用就是为了防止汽车由于刹车不及时而闯过了线。从常识上可以理解,越是靠近停车线,越是应该注意踩刹车,不能让车过线,所以这个微分项的作用,就可以理解为刹车,当车离停车线很近并且车速还很快时,这个微分项的绝对值(实际上是一个负数)就会很大,从而表示应该用力踩刹车才能让车停下来。
    切换到上面给水缸加水的例子,就是当发现水缸里的水快要接近1的时候,加入微分项,可以防止给水缸里的水加到超过1米的高度,说白了就是减少控制过程中的震荡。

    现在在回头看这个公式,就很清楚了
    这里写图片描述
    括号内第一项是比例项,第二项是积分项,第三项是微分项,前面仅仅是一个系数。很多情况下,仅仅需要在离散的时候使用,则控制可以化为
    这里写图片描述
    这里写图片描述
    每一项前面都有系数,这些系数都是需要实验中去尝试然后确定的,为了方便起见,将这些系数进行统一一下:
    这里写图片描述
    这样看就清晰很多了,且比例,微分,积分每个项前面都有一个系数,且离散化的公式,很适合编程实现。
    讲到这里,PID的原理和方法就说完了,剩下的就是实践了。在真正的工程实践中,最难的是如果确定三个项的系数,这就需要大量的实验以及经验来决定了。通过不断的尝试和正确的思考,就能选取合适的系数,实现优良的控制器。

    展开全文
  • 手机移动端js插件手指缩放图片

    万次阅读 2015-07-22 22:56:12
    插件下载链接:
    <script src="hammerPluin.js"></script>
    
    <script src="hammer.js"></script>
    <img src="jieshao.png" width="100%" id="jieshao"/>

    <!--img的ID填写在hammerPluin.js指定位置即可-->


    插件下载链接:http://download.csdn.net/detail/chaishen10000/8924563

    展开全文
  • 微信小程序中实现手指缩放图片

    千次阅读 2018-03-14 14:43:37
    公司开发微信小程序,pm想实现如下需求:...除了不能预览开发环境的本地电脑的图片外,你手机真机的图片,以及http服务器图片都是可以预览的,而且缩放功能做得很流畅。下面就说说如何用js来实现这个功能吧。文...

    公司开发微信小程序,pm想实现如下需求:

    用手指缩放图片。其实在实现这个需求以前,并不知道,微信公众号以及微信小程序里面有一个原生的api就自带这个特效,而且微信朋友圈也是用的这个api。wx.previewImage,就是它。预览图片。除了不能预览开发环境的本地电脑的图片外,你手机真机的图片,以及http服务器上的图片都是可以预览的,而且缩放功能做得很流畅。下面就说说如何用js来实现这个功能吧。

    文章里面的思路参考此文章:链接描述


    先上源码,然后在逐步剖析:

    Page({
        data: {
            touch: {
                distance: 0,
                scale: 1,
                baseWidth: null,
                baseHeight: null,
                scaleWidth: null,
                scaleHeight: null
            }
        },
        touchstartCallback: function(e) {
            // 单手指缩放开始,也不做任何处理 if(e.touches.length == 1) return console.log('双手指触发开始')
            // 注意touchstartCallback 真正代码的开始 // 一开始我并没有这个回调函数,会出现缩小的时候有瞬间被放大过程的bug // 当两根手指放上去的时候,就将distance 初始化。 let xMove = e.touches[1].clientX - e.touches[0].clientX;
            let yMove = e.touches[1].clientY - e.touches[0].clientY;
            let distance = Math.sqrt(xMove * xMove + yMove * yMove);
            this.setData({
               'touch.distance': distance,
            })
        },
        touchmoveCallback: function(e) {
            let touch = this.data.touch
            // 单手指缩放我们不做任何操作 if(e.touches.length == 1) return console.log('双手指运动')
            let xMove = e.touches[1].clientX - e.touches[0].clientX;
            let yMove = e.touches[1].clientY - e.touches[0].clientY;
            // 新的 ditance let distance = Math.sqrt(xMove * xMove + yMove * yMove);
            let distanceDiff = distance - touch.distance;
            let newScale = touch.scale + 0.005 * distanceDiff
            // 为了防止缩放得太大,所以scale需要限制,同理最小值也是 if(newScale >= 2) {
                newScale = 2
            }
            if(newScale <= 0.6) {
                newScale = 0.6
            }
            let scaleWidth = newScale * touch.baseWidth
            let scaleHeight = newScale * touch.baseHeight
            // 赋值 新的 => 旧的 this.setData({
               'touch.distance': distance,
               'touch.scale': newScale,
               'touch.scaleWidth': scaleWidth,
               'touch.scaleHeight': scaleHeight,
               'touch.diff': distanceDiff
            })
        },
        bindload: function(e) {
          // bindload 这个api是<image>组件的api类似<img>的onload属性 this.setData({
              'touch.baseWidth': e.detail.width,
              'touch.baseHeight': e.detail.height,
              'touch.scaleWidth': e.detail.width,
              'touch.scaleHeight': e.detail.height
          })
        }
    })
    

    wxml文件对应如下,就不做解释了:

    <view class="container">
        <view bindtouchmove="touchmoveCallback" bindtouchstart="touchstartCallback">
            <image src="../../resources/pic/cat.jpg" style="width: {{ touch.scaleWidth }}px;height: {{ touch.scaleHeight }}px" bindload="bindload"></image>
        </view>
    </view>
    


    作者:健儿
    链接:微信小程序中实现手指缩放图片-实战教程-小程序社区-微信小程序-微信小程序开发社区-小程序开发论坛-微信小程序联盟
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    展开全文
  • 用python爬取图片的一点小结

    万次阅读 多人点赞 2018-09-11 09:42:15
    最近在学习用python的爬虫爬取网络图片,制作数据集并用于后续的一些实验。看了很多关于python爬取图片的介绍,并验证了相关代码,先推荐几个介绍比较好的爬虫过程: [1]小白爬虫第一弹之抓取妹子图(这篇博客...

    一、原理小结

    最近在学习用python的爬虫爬取网络上的图片,制作数据集并用于后续的一些实验。看了很多关于python爬取图片的介绍,并验证了相关代码,先推荐几个介绍比较好的爬虫过程:

    [1]小白爬虫第一弹之抓取妹子图(这篇博客的过程讲解的非常详细)

    [2]Python爬虫之——爬取妹子图片(静态图片爬取)

    [3]利用python爬取网页图片(动态加载图片的爬取)

    总体上来说,爬虫的主要思路大致可以描述为:

    1. 判断待爬取网页中的图片是静态还是动态,并利用开发者选项F12查找图片的源

    2. python中导入相关模块,读取解析页面文件

    3. 分析所有图片的位置特点,并用python进行查找

    4. 设置下载路径,对找到的图像进行批量下载

    其中最为关键的还是第1步,即对页面的分析,找到相关的图像位置。

    二、动态图片的爬取

    动态图片是指像百度图片搜索,搜狗搜图等搜索引擎的搜索结果,这类图片的最大特点是,每次只加载一批图片,每向下拉都会继续加载新的图像,关于这类图片的爬取可以参考[3]。这里[3]给出一个可以直接运行的代码:

    # 导入相关的库
    import requests
    import json
    import urllib
    import os
    
    # 爬取图片的保存路径
    output_dir = "./images/"
    
    
    # 爬取搜狗搜图的函数
    def getSogouImag(category, length, path):
        '''
        参数category:指要爬取图片的类型,字符串格式,如:'壁纸'
        参数length:指要爬取多少张,整型
        参数path:存储路径
        '''
        n = length
        cate = category
        #http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E7%BE%8E%E5%A5%B3&tag=%E5%85%A8%E9%83%A8&start=0&len=15
        imgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category='+cate+'&tag=%E5%85%A8%E9%83%A8&start=0&len='+str(n)+'&width=1536&height=864')
        jd = json.loads(imgs.text)
        jd = jd['all_items']
        imgs_url = []
        for j in jd:
            imgs_url.append(j['pic_url'])
        m = 0
        for img_url in imgs_url:
                print('***** '+str(m)+'.jpg *****'+'   Downloading...')
                urllib.request.urlretrieve(img_url, path+str(m)+'.jpg')
                m = m + 1
        print('Download complete!')
    
    # 检查是否存在路径,若不存在,则创建
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    # 爬取图片
    getSogouImag('壁纸', 1000, output_dir)
    

    修改的话可以修改getSogouImag中的'壁纸',将其改为其他类型即可爬取相应的图片。

    爬取的效果图为:

    三、静态图片的爬取

    静态图片是指类似网页浏览图片那样,每个页面仅有一张或者几张图片,然后通过点击下一页来获取下一个页面中的图片。这类图片的爬取可以参考[2]。这里[2]给出一个可以直接运行的代码:

    # 导入相关的库
    import requests
    from bs4 import BeautifulSoup
    import os
    
    # 待爬取的网址
    all_url = 'http://www.mzitu.com'
    
    
    # http请求头,防止反爬虫
    Hostreferer = {
        'User-Agent':'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
        'Referer':'http://www.mzitu.com'
                   }
    # 此请求头破解盗链
    Picreferer = {
        'User-Agent':'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
        'Referer':'http://i.meizitu.net'
    }
    
    # 解析页面
    start_html = requests.get(all_url,headers = Hostreferer)
    
    # 爬取图片的保存地址
    path = 'D:/mzitu/'
    
    #找寻最大页数
    soup = BeautifulSoup(start_html.text,"html.parser")
    page = soup.find_all('a',class_='page-numbers')
    max_page = page[-2].text
    
    
    same_url = 'http://www.mzitu.com/page/'
    # 逐个爬取套图
    for n in range(1,int(max_page)+1):
        ul = same_url+str(n)
        # 解析页面
        start_html = requests.get(ul, headers = Hostreferer)
        soup = BeautifulSoup(start_html.text,"html.parser")
        # 找到图片所在的位置
        all_a = soup.find('div',class_='postlist').find_all('a',target='_blank')
        for a in all_a:
            title = a.get_text()    #提取文本
            if(title != ''):
                print("准备扒取:"+title)
    
                # win不能创建带?的目录
                if(os.path.exists(path+title.strip().replace('?',''))):
                        #print('目录已存在')
                        flag=1
                else:
                    os.makedirs(path+title.strip().replace('?',''))
                    flag=0
                os.chdir(path + title.strip().replace('?',''))
                
                # 找到href属性信息
                href = a['href']
                html = requests.get(href,headers = Hostreferer)
                mess = BeautifulSoup(html.text,"html.parser")
                pic_max = mess.find_all('span')
                pic_max = pic_max[9].text          #最大页数
                if(flag == 1 and len(os.listdir(path+title.strip().replace('?',''))) >= int(pic_max)):
                    print('已经保存完毕,跳过')
                    continue
    
                # 爬取套图中每一页的图片
                for num in range(1,int(pic_max)+1):
                    pic = href+'/'+str(num)
                    html = requests.get(pic,headers = Hostreferer)
                    mess = BeautifulSoup(html.text,"html.parser")
                    pic_url = mess.find('img',alt = title)
                    print(pic_url['src'])
                    #exit(0)
                    html = requests.get(pic_url['src'],headers = Picreferer)
                    file_name = pic_url['src'].split(r'/')[-1]
                    
                    # 保存结果
                    f = open(file_name,'wb')
                    f.write(html.content)
                    f.close()
                print('完成')
        print('第',n,'页完成')

    该代码可直接运行,爬取的最终结果就不再展示。

    展开全文
  • 双指缩放图片,双击放大缩小图片DEMO,用的是开源库。
  • 图片缩放 title > < link rel ="stylesheet" type ="text/css" href ="scale.css" /> < style type ="text/css" > .list img { width : 200px ; height : 200px ; } style > head...
  • html 图片居中方式

    万次阅读 多人点赞 2019-04-11 17:08:39
    图片的居中方式有很多种吧,算是html基础,但是某一次我就给忘记怎么设置图片居中了。先写几个,后续再来补充其他方法 div{ width: 200px; height: 200px; border: 3px solid skyblue; } 以上代码的...
  • 图像识别技术原理和神经网络的图像识别技术

    万次阅读 多人点赞 2019-03-03 19:44:58
    当看到一张图片时,我们的大脑会迅速感应到是否见过此图片或与其相似的图片。其实在“看到”与“感应到”的中间经历了一个迅速识别过程,这个识别的过程和搜索有些类似。在这个过程中,我们的大脑会根据存储记忆中...
  • 想用Qt在开发板实现滑动切换图片,以前用过C语言写过,不过现在要用Qt实现,查阅了相关网页博客,发现大多数都是点击实现图片切换或自动切换,但这不太符合开发板的应用场景,于是就记录一下滑动切换图片的开发...
  • Pinchzoom.js插件实现手指触摸图片放大缩小 .pinch-zoom,.pinch-zoom img{ width: 100%; -webkit-user-drag: none; -moz-user-drag: none; -ms-user-drag: none; user-drag: none; }
  • 关于图片的缩放和拖动,一般使用到的技能是:单拖动图片和双缩放图片.最近由于工作的要求,需要实现:   1.双指拖动和在拖动过程中控制图片缩放.   2.绘制的线条与背景图片实现正片叠底的混合效果.先效果图:...
  • 用PIL的Image打开我的图片:from PIL import Image img = Image.open('0.jpg') 用matplotlib给出一个plot对象:import matplotlib.pyplot as plt fig = plt.figure()然后用到的是matplotlib 的一个函数canvas.mpl_...
  • Android圆角图片和圆形图片实现总结

    万次阅读 多人点赞 2016-10-27 15:14:06
    Android研发中经常会遇见圆角或者圆形图片的展示,但是系统中ImageView并不能直接支持,需要我们自己做一些处理,来实现圆角图片或者圆形图片,自己最近对这块的实现做了一下总结.
  • 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,...现在Android图片加载框架非常成熟,从最早的老牌图片加载框架UniversalImageLoader,到后来Google推出的Volley,再到后
  • 图片浏览器Controller的主要思路是:新建一个 JZAlbumViewController,在这个controller里主要显示一个UIScrollView,这个UIScrollView用来显示左右的图片, 根据传入的图片数组imgArr来设置 contentSize self....
  • Android之——史最简单图片轮播广告效果实现

    万次阅读 多人点赞 2015-08-28 12:03:06
    如今的Android开发需求越来越来多,实现效果越来越酷炫,很多Android APP都要实现PC网站那样的图片轮播效果,那么,这些图片的轮播效果是如何实现的呢?下面,我就跟大家一起来实现这些酷炫的功能。 一、原理 首先...
  • 这里是新闻标题简要介绍一下吗素冠荷鼎更待何时大好时光大好时光的还是  2013-4-12            .bs-example{position:relative;width:200px;height:200p
  • 人行征信贷款余额的是什么? 下面图片是简版征信的部分截图,看到有余额3478元,贷款余额是什么意思呢? 贷款余额:贷款人尚未归还放款人(银行)的金额总额。通俗地说,就是贷款人还欠的钱,或者说是放款人...
  • OpenCV把彩色图片转换为灰度图片

    万次阅读 2019-08-26 10:41:36
    在实现彩色图片转换为灰度图片之前,先来了解一下图像数字化。当你张开眼睛,就看到现实的世界,比如房子,花草和不同的物品。如果要把当前的眼睛所见的东西保存起来,在以前是使用胶片相机,那是采用化学的感光方法...
  • 可是我在B站一个粉丝私信说想让我录制一个关于MQTT上传图片的教程,所以今天整理了一下,写了一个工具,演示说一说实现的思路。 我先演示一下使用自己编写的工具上传的示例,首先我创建了一个基于MQTT协议的...
  • 基于Python的数据分析

    万次阅读 多人点赞 2019-02-25 15:50:02
    网络爬虫获取的是通过Python编写爬虫程序合法获取互联网中的各种文字、语音、图片和视频等信息;本地获取的是通过计算机工具获取存储在本地数据库中的生产、营销和财务等系统的历史数据和实时数据。 3)数据...
  • 我使用了touchesMoved方法,实现一张图片随着手指在屏幕底部滑动而移动,就是沿着x坐标移动,但是如果手指在纵向的y坐标滑动,图片就没有反应,有没有方法让图片既能水平移动也能上下移动? 我的代码: - ...
  • 效果说明:一排图片大小一致,当鼠标放在任一图片上时,图片放大并且旋转。 制作思路: 1、给图片添加&lt;a&gt;标签,利用伪类选择器实现 2、设置鼠标悬浮在a标签上时,添加动画属性。 3、主要用到属性...
  • 3、点击图主区右下角有个最大化按钮,打开如下界面:在这个界面,可以向在触屏手机浏览图片一样,就像苹果App看图软件一样手指左右稍微滑动,图片自动滑入滑出效果,效果很酷。     -------------...
  • python 识别图片上的数字

    千次阅读 2020-10-16 13:00:44
    python 识别图片上的数字,使用pytesseract库从图像中提取文本,而识别引擎采用 tesseract-ocr。 Tesseract是一款由Google赞助的开源OCR。OCR,即Optical Character Recognition,光学字符识别,是通过扫描字符,...
  • MySQL中存储图片 longBlob类型

    千次阅读 2016-09-14 23:52:39
    MySQL中存储图片 MySQL中存储图片   1 介绍 在设计到数据库的开发中,难免要将图片或音频文件插入到数据库中的情况。一般来说,我们可以同过插入图片文件相应的存储位置,而不是文件...
  • 基于python的多张不同宽高图片拼接成大图

    千次阅读 热门讨论 2019-05-12 18:49:29
    半年前写过一篇将多张图片拼接成大图的博客,是讲的把所有图片先转换为256×256的图片后再进行拼接,今天看到一个朋友的评论说如何拼接非正方形图片,如47×57,之前有个朋友也问过这个,我当时理解错了,以为是要把...
  • pyqt 用opencv在Qlabel显示图片的一些问题

    千次阅读 多人点赞 2019-01-12 14:16:32
    图片显示扭曲问题 opencv_img=cv2.imread(&quot;111.png&quot;, 1) if opencv_img is None: print ('None') else: size = (int(self.label.width()),int(self.label.height())) shrink = cv2.resize...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 448,860
精华内容 179,544
关键字:

往上指的图片