html5 canvas基础篇

============================== 大纲 ===================================
1如何在html文档中引入canvas
2如何在canvas上绘制各种图形和对象
3如何修改图形和对象
4如何擦除图形和对象
5如何将canvas大小设置为浏览器窗口大小
======================================================================
如何在html文档中引入canvas
在html中引入canvas的方法就是添加<canvas>元素,
仅此而已。不需要任何插件。

附录:
canvas的第一个属性就是canvas的width和height
在不设置的情况下,默认是300px 150px。

canvas仅仅只是html中的一个元素。可以通过CSS
操作它。比如浮动啊。

关于浏览器的问题:目前除了IE浏览器(ie9之前),其余
的浏览器都支持canvas。当然可以通过ExploreCanvas
脚本来规避这个问题。
=======================================================================
如何在canvas上绘制各种图形和对象
绘制矩形
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="./jquery.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            //..使用jquery获取特定id属性元素
            let canvas = $('#myCanvas');
            //get(0)必须的,因为使用的jquery,目前不清楚。
            let context = canvas.get(0).getContext('2d');
            //fillRect(x, y, width, height)
            context.fillRect(40, 40 ,100, 100);
            context.strokeRect(10, 10, 200, 200);
        });
    </script>
</head>
<body>
    <canvas id="myCanvas" width="400px" height="400px">
        <!--
            script脚本放在body前面,那么当程序加载解析时,
            存在一个问题。当执行let canvas = $('#myCanvas');
            此时还没有加载<canvas id="myCanvas"></canvas>
            那为什么不报错呢?只能说明你的思路有问题。
            $(document).ready(function(){})只是在DOM加载完毕以后
            才会执行。也即是说只有在页面加载完毕之后才开始执行。
        -->
    </canvas>
</body>
<footer>
    <!--
        
        如何移动矩形呢?设置x和y的值。
        和fillRect相对的是strokeRect。
        fillRect绘制一个矩形,并且给这个矩形充填默认的颜色。
        strokeRect绘制一个矩形,但是不充填图形,而仅仅残留边框。
    -->
</footer>
</html>
---------------------------------------------------------------------
绘制直线
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="./jquery.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            var context = $('#myCanvas').get(0).getContext('2d');
            let width = 600, height = 600;
            let position = {x: 200, y: 200};
            for (let i = 0; i < 64; i++) {
                context.strokeRect(position.x, position.y, width, height);
                width = width / 2;
                height = height / 2;
            }
            context.beginPath();    //声明画线
            context.moveTo(200, 200);   //起点
            context.lineTo(800, 800);   //终点
            context.stroke();   //充填
            context.closePath();    //闭合路径
        });
    </script>
</head>
<body>
    <canvas id="myCanvas" width="1000px" height="1000px">
        <!--
            清除重叠的边框
        -->
    </canvas>
</body>
</html>
-----------------------------------------------------------------------
绘制圆弧
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="./jquery.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            var context = $('#myCanvas').get(0).getContext('2d');
            context.beginPath();
            context.arc(600, 400, 200, 0, Math.PI * 2 / 3, true);
            context.closePath();
            context.strokeStyle = "rgb(255, 0, 0)";
            context.stroke();
            //context.fillStyle = "rgb(0, 255, 0)";
            //context.fill();
        });
    </script>
</head>
<body>
    <canvas id="myCanvas" width="1000px" height="1000px">
        <!--
            清除重叠的边框
        -->
    </canvas>
</body>
</html>
-------------------------------------------------------------------------
绘制文本
提前说明一下:除非你必须使用canva绘制文本,否则,不建议你使用canvas绘制文本。正常的文本
最好使用html中的文本容器,比如span,p,div等。然后使用css移动到指定的位置。
使用canvas绘制的文本本质上不是文字而是图形。所以一旦绘制完成就不可以修改文字的属性。
但是使用p盛放的文字可以动态地修改样式。
文本也分为描边文本fillText和充填文本strokeText。

let word = '写过, 活过,爱过。 --- 司汤达';
context.font = "normal 40px serif";
context.fillText(word, 200, 400);
context.font = '40px serif';
context.strokeText(word, 400, 600);

附录:
canvas仅仅是一个元素,对于绘图贡献最大的并不是canvas
元素本身,而是canvas元素的上下文context。你是在context
中绘图,而不是在canvas本身绘图。这是基本的一点,需要知道。
=========================================================================
如何修改图形和对象
修改图形的充填颜色
context.fillStyle = 'rgb(255, 0, 0)';
context.fill();
绘制图形的描边颜色
context.strokeStyle = 'rgb(255, 0, 0)';
context.stroke();
修改图形的线宽
context.lineWidth
=========================================================================
如何擦除图形和对象
局部的擦除,只是局部地擦除context中地图像。
clearRect(x, y, width, height);
彻底地擦除,不仅仅清除所有地图形和图像。而且擦除所有地样式。初始化时使用,比较合适。
canvas.attr('width', canvas.width());
canvas.attr('height', canvas.height());
=========================================================================
如何将canvas大小设置为浏览器窗口大小
普通地元素只需要设置width=100%,height=100%就可以实现元素平铺浏览器。
但是,亲爱的,不幸的是canvas并不支持。canvas会将width=100%,height=100%解释成100px, 100px。
我们必须通过BOM才可以获取浏览器地宽度和高度。进而将获取地宽高赋给canvas。仅此而已。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="./jquery.js"></script>
    <style>
        body {margin: 0; padding: 0}
        canvas {display: block} /*将canvas设置为块级元素设定宽度和高度避免出现滚动条*/
    </style>
</head>
<body>
    <canvas id="myCanvas" width="1000px" height="1000px">
    </canvas>
    <script type="text/javascript">
        function canvasResize() {
            var canvas  = $('#myCanvas');
            var context = canvas.get(0).getContext('2d');
            /*获取浏览器窗口当前的宽度和高度*/
            canvas.attr('width', $(window).get(0).innerWidth);
            canvas.attr('height', $(window).get(0).innerHeight);
            context.fillRect(0, 0, canvas.width(), canvas.height());
        }
        //每次动态调整页面大小时,canvas更新宽度和高度。
        //使得canvas始终做到和浏览器大小同步。
        $(window).resize(canvasResize);
        canvasResize();
    </script>
</body>
</html>
=================================================================================
中午复习BOM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值