Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

Bash 一些变量的操作

Bash 一些变量的操作

有时候我们需要对变量进行一些操作,比如截取,替换,删除等操作,很多同学会使用awk, sed 或cut等命令来干这事,其实,bash的内置的变量操作就可以干这个事。下面说明一些常用的方法:这些操作需要使用 ${var} 这种变量的写法(用花括号)。${#var} 输出 var的字符串长度${var:pos:len} 你可以理解为变量的切片操作。如:> var=0123456789> echo ${var:2}23456789> echo ...
利用OpenCV检测图像中的长方形画布或纸张并提取图像内容

利用OpenCV检测图像中的长方形画布或纸张并提取图像内容

问题如下:也就是在一张照片里,已知有个长方形的物体,但是经过了透视投影,已经不再是规则的长方形,那么如何提取这个图形里的内容呢?这是个很常见的场景,比如在博物馆里看到一幅很喜欢的画,用手机找了下来,可是回家一看歪歪斜斜,脑补原画内容又觉得不对,那么就需要算法辅助来从原图里提取原来的内容了。不妨把应用的场景分为以下:纸张四角的坐标(图中红点)已知的情况也就是上面的左图中4个红点是可以准确获取,比如手动标注,那么就简单了:用OpenCV的Perspective...
[C++]二维数组还是一维数组?

[C++]二维数组还是一维数组?

记得刚学习C++那会这个问题曾困扰过我,后来慢慢形成了不管什么时候都用一维数组的习惯,再后来知道了在一维数组中提出首列元素地址进行二维调用的办法。可从来没有细想过这个问题,最近自己写了点代码测试下,虽然还是有些不明就里,不过结果挺有意思。为了避免编译器优化过度,用的是写操作,int,测试分为不同大小的空间,同样大小空间不同的行和列数。分别记录逐行写入,逐列写入,按间隔写入,空间申请和释放的时间。测试代码一维数组的申请和释放1 // Create2 int ...
OpenCV使用RANSAC的仿射变换估计 estimateAffine2D

OpenCV使用RANSAC的仿射变换估计 estimateAffine2D

OpenCV自带有findHomography这个用RANSAC随机采样求透视变换的方法,很好用,但是没有一个类似的求仿射的。自带的getAffineTransform只是简单的使用三对点。而estimateAffine3D使用的是三维坐标,转换起来有点不方便,而且我在使用中发现,即使把z坐标设置为0,有时候求出来的模型竟然100%都是内点,OpenCV的源码,自己提取,封装了一下.用的是SVN的Trunk,主版本2.32有几个改动:1.OpenCV的es...
二叉排序树实现(C++封装)

二叉排序树实现(C++封装)

设计思路设计一个类,根结点只可读取,具备构造二叉树、插入结点、删除结点、查找、 查找最大值、查找最小值、查找指定结点的前驱和后继等功能接口。二叉排序树概念它或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树。二叉排序树的各种操作插入新节点这是一个递归操作,递归设计时要找到最源头,才能得到最简设计。一种...
Python面向对象编程学习笔记

Python面向对象编程学习笔记

一、类和对向面向过程和面向对象的编程面向过程的编程:函数式编程,C程序等面向对象的编程:C++,JAVA,Python等类和对象:是面向对象中的2个重要概念类:是事物的抽象,比如汽车;对象:是类的一个实例,比如QQ汽车,大客车。范例说明:汽车模型可以对汽车的特征和行为进行抽象,然后可以实例化为一台真实的汽车实体出来。二、Python类定义Python类的定义使用class关键字定义一个类,且类名的首字母要大写;当程序员创建的类型不能用简单类型表示时,就要创...
Effective Java - 用静态工厂方法代替构造器

Effective Java - 用静态工厂方法代替构造器

Effective Item - 考虑用静态工厂方法代替构造器我们有两种常见的方法获得一个类的实例:公有的构造器提供静态工厂方法(static factory method)相对公有的构造器,静态工厂方法有以下几大优势。优势1.静态工厂方法的名称,因此比构造器更准确地描述返回的实例。比如BigInteger.probablePrime方法:public static BigInteger probablePrime(int bitLength, Rando...
Effective Java - 避免使用finalizer

Effective Java - 避免使用finalizer

Finalizers are unpredictable ,often dangerous ,and generally unnecessary.在Java中,GC会自动回收不可达对象相关的空间,而不需要程序员做相关的工作。对于非内存资源,我们通常使用try-finally语句块进行释放。finalizer不保证立即执行。从一个对象编程不可达状态到调用finalizer,这段时间是任意的。即,对时间敏感的操作不能在finalizer中进行。never do...
Effective Java - 谨慎覆盖equals

Effective Java - 谨慎覆盖equals

平时很难遇到需要覆盖equals的情况。什么时候不需要覆盖equals?类的每个实例本质上是唯一的,我们不需要用特殊的逻辑值来表述,Object提供的equals方法正好是正确的。超类已经覆盖了equals,且从超类继承过来的行为对于子类也是合适的。当确定该类的equals方法不会被调用时,比如类是私有的。如果要问什么时候需要覆盖equals?答案正好和之前的问题相反。即,类需要一个自己特有的逻辑相等概念,而且超类提供的equals不满足自己的行为。(PS...
Effective Java - 谨慎覆盖clone

Effective Java - 谨慎覆盖clone

覆盖clone时需要实现Cloneable接口,Cloneable并没有定义任何方法。那Cloneable的意义是什么?如果一个类实现了Clonable,Object的clone方法就可以返回该对象的逐域拷贝,否则会抛出CloneNotSupportedException。通常,实现接口是为了表明类的行为。而Cloneable接口改变了超类中protected方法的行为。这是种非典型用法,不值得仿效。好了,既然覆盖了clone方法,我们需要遵守一些约定:x...
Effective Java - 使可访问性最小化

Effective Java - 使可访问性最小化

模块设计是否良好,有个重要的因素在于,相对外部模块是否隐藏内部数据以及实现细节。设计良好的模块会隐藏实现细节,并将API与其实现隔离开来。模块之间通过API进行通信,对于内部工作情况互不可见。即,封装(encapsulation)——软件设计的基本原则之一。为什么要封装?通过封装可以有效地接触各个模块之间的耦合关系,使这些模块可以独立地开发、测试、优化、使用、理解和修改。即:可以增加开发效率,模块可以并行开发。封装可以减轻维护的负担...
<< 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 >>