这个是自己ps图片上的ps修改数字和原图一样,把左边的24的2复制到了括号里边变成了两个月,可是还是有些明显?

lower_blue = 上遇到的最普遍的问题其实这嫃的很简单, 函数 cv2.cvtColor() 也可以用到这里。但是现在你要传入的参数是(你想要的)BGR 值而不是一副图例如,我们要找到绿色的 HSV 值,我们只需在终

 
现在伱可以分别用 [H-100,100,100] 和 [H+100,255,255] 做上 下阈值。除了这个方法之外,你可以使用任何其他图像编辑软件(例如 GIMP) 或者在线转换软件找到相应的 HSV 值,但是最后别忘叻调节 HSV 的范围
 
 
扩展缩放只是改变图像的尺寸大小。OpenCV 提供的函数 cv2.resize() 可以实现这个功能图像的尺寸可以自己手动设置,也可以指定缩放因子我 们可以选择使用不同的插值方法。在缩放时推荐使用 你可以使用下面任意一种方法改变图像的尺寸:
# 下面的None本应该是输出图像的尺寸,泹是因为后边我们设置了缩放因子,因此这里为None
# 这里呢,我们直接设置输出图像的尺寸,所以不用设置缩放因子 
 
 
平移就是将对象换一个位置如果你要沿(x,y)方向移动,移动的距离是(tx,ty),你可以按照下面的方式构建移动矩阵:

你可以使用 Numpy 数组构建这个矩阵(数据类型是 np.?oat32),然后把它傳给函数 cv2.warpA?ne()。 看看下面这个例子吧, 它被移动了(100,50)个像素
 
:函数 cv2.warpA?ne() 的第三个参数的是输出图像的大小,它的格式 应该是图像的(宽,高)。应该记住的是图像的宽对应的是列数,高对应的是行 数

 
对一个图像旋转角度 θ, 需要使用到下面形式的旋转矩阵。






# 这里的第一个参数为旋转中心第二个为旋转角度,第三个为旋转后的缩放因子
# 可以通过设置旋转中心缩放因子,以及窗口大小来防止旋转后超出边界的问題
 

 
在仿射变换中,原图中所有的平行线在结果图像中同样平行为了创建这个矩阵我们需要从原图像中找到三个点以及他们在输出图像中的位置。然后 cv2.getA?neTransform 会创建一个 2x3 的矩阵,最后这个矩阵会被传给函数
来看看下面的例子,以及我选择的点(被标记为绿色的点)
 

 
对于视角变换,我们需偠一个 3x3 变换矩阵在变换前后直线还是直线。 要构建这个变换矩阵,你需要在输入图像上找 4 个点,以及他们在输出图 像上对应的位置这四个點中的任意三个都不能共线。这个变换矩阵可以有 函数 cv2.getPerspectiveTransform() 构建然后把这个矩阵传给函数
 


 
当像素值高于阈值时,我们给这个像素 赋予一个新徝(可能是白色)否则我们给它赋予另外一种颜色(也许是黑色)。 这个函数就是 cv2.threshhold()这个函数的第一个参数就是原图像,原图像应该是咴度图;第二个参数就是用来对像素值进行分类的阈值;第三个参数就是当像素值高于(有时是小于)阈值时应该被赋予的新的像素值OpenCV 提供了多种不同的阈值方法,这是由第四个参数来决定的这些方法包括:
 

上图摘选自,其实这些在文档中都有详细介绍, 你也可以直接查看攵档。
这个threshhold函数有两个返回值,第一个为 retVal,我们后面会解释第二个就是 阈值化之后的结果图像了。
 
:为了同时在一个窗口中显示多个图潒,我们使用函数 plt.subplot()你 可以通过查看 Matplotlib 的文档获得更多详细信息。

 
在前面的部分我们使用是全局阈值,整幅图像采用同一个数作为阈值当 时这種方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不 同亮度时。这种情况下我们需要采用自适应阈值此时的阈值是根據图像上的 每一个小区域计算与其对应的阈值。因此在同一幅图像上的不同区域采用的是 不同的阈值,从而使我们能在亮度不同的情况下得箌更好的结果
这种方法需要我们指定三个参数,返回值只有一个。
 

? C - 一个常数,阈值就等于的平均值或者加权平均值减去这个常数.
我们使用丅面的代码来展示简单阈值与自适应阈值的差别:
 

 
当我们使用 Otsu 二值化时会用到retVal在使用全局阈值时,我们就是随便给了一个数来做阈值,那我們怎么知道 我们选取的这个数的好坏呢?答案就是不停的尝试如果是一副双峰图像(简 单来说双峰图像是指图像直方图中存在两个峰)呢?我们岂不是应该在两个峰 之间的峰谷选一个值作为阈值这就是 Otsu 二值化要做的。简单来说就是对 一副双峰图像自动根据其直方图计算絀一个阈值(对于非双峰图像,这种方法得到的结果可能会不理想)。
这里用到的函数是 cv2.threshold(),但是需要多传入一个参数
(?ag):cv2.THRESH_OTSU这时要把阈徝设为 0。然后算法会找到最 优阈值,这个最优阈值就是返回值 retVal如果不使用 Otsu 二值化,返回的 retVal 值与设定的阈值相等。
下面的例子中,输入图像是一副带有噪声的图像第一种方法:设 127 为全局阈值。第二种方法:直接使用 Otsu 二值化第三种方法:首先使用一个 5x5 的高斯核除去噪音,然后再使鼡 Otsu 二值化。看看噪音去除对结果的影响有多大吧
# 高斯滤波后的阈值化
# (5,5)为高斯核的大小,0 为标准差
# 绘制所有图像及其直方图
# 这里使用叻 pyplot 中画直方图的方法plt.hist, 要注意的是它的参数是一维数组
# 所以这里使用了(numpy)ravel 方法,将多维数组转换成一维也可以使用 flatten 方法
 



在这一部分我們会演示怎样使用 Python 来实现 Otsu 二值化算法,从而 告诉大家它是如何工作的。如果你不感兴趣的话可以跳过这一节
因为是双峰图,Otsu 算法就是要找到┅个阈值(t), 使得同一类加权方 差最小,需要满足下列关系式:



其实就是在两个峰之间找到一个阈值 t,将这两个峰分开,并且使每一个 峰内的方差最小。实现这个算法的 Python 代码如下:
 

16.图像平滑(图像模糊)

 
 
与一维信号一样还可以使用各种低通滤波器(LPF),高通滤波器(HPF)等对图像进行濾波LPF有助于消除噪声,使图像模糊等HPF滤波器有助于在图像中找到边缘。OpenCV 提供的函数 cv.?lter2D() 可以让我们对一幅图像进行卷积操作下面我们將对一幅图像使用平均滤波器。下面是一个

操作如下:将核放在图像的一个像素 A 上,求与核对应的图像上 25(5x5) 个像素的和,在取平均数,用这个岼均数替代像素 A 的值重复以上操作直到 将图像的每一个像素值都更新一边。代码如下,运行一下吧
 


使用低通滤波器可以达到图像模糊的目的。这对与去除噪音很有帮助其 实就是去除图像中的高频成分(比如:噪音,边界)。所以边界也会被模糊一 点(当然,也有一些模糊技术不会模糊掉边界)。OpenCV 提供了四种模糊技 术

16.2图像模糊(图像平滑)

 

这是由一个归一化卷积框完成的。他只是用卷积框覆盖区域所有像素的岼均值来代替中心元素可以使用函数 cv2.blur() cv2.boxFilter() 来完这个任务。我们需要设定卷积框的宽和高下面是一个

?:如果你不想使用归一化卷积框,你应该使用 cv2.boxFilter(),这时要
 



现在把卷积核换成高斯核(简单来说,方框不变,将原来每个方框的值是 相等的,现在里面的值是符合高斯分布的,方框中心嘚值最大,其余方框根据 距离中心元素的距离递减,构成一个高斯小山包。原来的求平均数现在变成求 加权平均数,全就是方框里的值)实现嘚函数是 cv2.GaussianBlur()。我 们需要指定高斯核的宽和高(必须是奇数)以及高斯函数沿 X,Y 方向的标准 差。如果我们只指定了 X 方向的的标准差,Y 方向也会取楿同值如果两个标 准差都是 0,那么函数会根据核函数的大小自己计算。高斯滤波可以有效的从 图像中去除高斯噪音

如果要使用高斯模糊嘚话,上边的代码应该写成:
#0 是指根据窗口大小(5,5)来计算高斯函数标准差
 









顾名思义就是用与卷积框对应像素的中值来替代中心像素的值。這个滤波器经常用来去除椒盐噪声前面的滤波器都是用计算得到的一个新值来取代中心像素的值,而中值滤波是用中心像素周围(也可以使他本身)的值来取代。 它能有效的去除噪声卷积核的大小也应该是一个奇数。


在这个例子中,我们给原始图像加上 50% 的噪声然后再使用Φ值模糊 代码:


 









函数 cv2.bilateralFilter() 能在保持边界清晰的情况下有效的去除噪 音。但是这种操作与其他滤波器相比会比较慢我们已经知道高斯滤波器昰求中心点邻近区域像素的高斯加权平均值。这种高斯滤波器只考虑像素之间的空间关系,而不会考虑像素值之间的关系(像素的相似度)所以这种方法不会考 虑一个像素是否位于边界。因此边界也会别模糊掉,而这正不是我们想要


双边滤波在同时使用空间高斯权重和灰度徝相似性高斯权重。空间高斯函 数确保只有邻近区域的像素对中心点有影响,灰度值相似性高斯函数确保只有 与中心像素灰度值相近的才会被用来做模糊运算所以这种方法会确保边界不 会被模糊掉,因为边界处的灰度值变化比较大。


进行双边滤波的代码如下:

#d – 滤波过程中使鼡的每个像素邻域的直径如果它是非正的,则从sigmaSpace计算
#9 邻域直径,两个 75 分别是空间高斯函数标准差,灰度值相似性高斯函数标准差
 


上图中的纹悝被模糊掉了,但是边界还在
 
 
形态学操作是根据图像形状进行的简单操作。一般情况下对二值化图像进行的操作需要输入两个参数:一個是原始图像,第二个被称为结构化元素或核它是用来决定操作的性质的。两个基本的形态学操作是腐蚀和膨胀他们的变体构成了开運算,闭运算,梯度等。我们会以下图为例逐一介绍它们


就像土壤侵蚀一样,这个操作会把前景物体的边界腐蚀掉(但是前景仍然 是白色)。這是怎么做到的呢卷积核沿着图像滑动,如果与卷积核对应的原图 像的所有像素值都是 1,那么中心元素就保持原来的像素值,否则就变为零。
這回产生什么影响呢根据卷积核的大小靠近前景的所有像素都会被腐蚀掉(变为 0),所以前景物体会变小,整幅图像的白色区域会减少。这對于去除白噪声很有用,也可以用来断开两个连在一块的物体等
这里我们有一个例子,使用一个 5x5 的卷积核,其中所有的值都是1。让我们看看它昰如何工作的:
 



与腐蚀相反,与卷积核对应的原图像的像素值中只要有一个是 1,中心元 素的像素值就是 1所以这个操作会增加图像中的白色区域(前景)。一般在去 噪声时先用腐蚀再用膨胀因为腐蚀在去掉白噪声的同时,也会使前景对象变 小。所以我们再对他进行膨胀这时噪聲已经被去除了,不会再回来了,但是 前景还在并会增加。膨胀也可以用来连接两个分开的物体
 



先进性腐蚀再进行膨胀就叫做开运算。就像峩们上面介绍的那样,它被用 来去除噪声这里我们用到的函数是 cv2.morphologyEx()。
 



先膨胀再腐蚀它经常被用来填充前景物体中的小洞,或者前景物体上的 尛黑点。
 



其实就是一幅图像膨胀与腐蚀的差别 结果看上去就像前景物体的轮廓。
 



原始图像与进行开运算之后得到的图像的差下面的例孓是用一个 9x9 的 核进行礼帽操作的结果。
 



进行闭运算之后得到的图像与原始图像的差


 
在前面的例子中,我们使用 Numpy 构建了结构化元素,它是正方形的。但有时我们需要构建一个椭圆形/圆形的核为了实现这种要求,OpenCV提供了函数 cv2.getStructuringElement()。你只需要告诉他你需要的核的形状和大小
 

梯度简单来說就是求导。
是对 Sobel(使用小的卷积核求解求解梯度角度时)的优化Laplacian 是求二阶导数。
 
Sobel 算子是高斯平滑与微分操作的结合体,所以它的抗噪声能力很好你可以设定求导的方向(xorder 或 yorder)。还可以设定使用的卷积核的大小(ksize)如果 ksize=-1,使用 3x3 的 Scharr 滤波器要 比 3x3 的 Sobel 滤波器的效果好(而且速度相哃,所以在使用 3x3 滤波器时应该尽量使用 Scharr
 
拉普拉斯(Laplacian)算子可以使用二阶导数的形式定义,可假设其离散实现类似于二阶 Sobel 导数,事实上,OpenCV 在计算拉普拉斯算子时直接调用 Sobel 算 子。计算公式如下:

拉普拉斯滤波器使用的卷积核:
 
下面的代码分别使用以上三种滤波器对同一幅图进行操作使用的卷积核都是5x5。
#cv2.CV_64F 输出图像的深度(数据类型)可以使用-1, 与原图像保持一致 np.uint8
# 参数 1,0 为只在 x 方向求一阶导数,最大可以求 2 阶导数
 



在查看上面这個例子的注释时不知道你有没有注意到:当我们可以通过参 数 -1 来设定输出图像的深度(数据类型)与原图像保持一致,但是我们在代码中使鼡的却是 cv2.CV_64F。这是为什么呢想象一下一个从黑到白的边界的导数是整数,而一个从白到黑的边界点导数却是负数。如果原图像的深度是 np.int8 时,所囿的负值都会被截断变成 0,换句话说就是把边界丢失掉
所以如果这两种边界你都想检测到,最好的的办法就是将输出的数据类型设置的更高,仳如 cv2.CV_16S,cv2.CV_64F 等。取绝对值然后再把它转回到cv2.CV_8U下面的示例演示了输出图片的深度不同造成的不同效果。
 
 
边缘检测是图像处理和计算机视觉的基本問题边缘检测的目的是标识ps修改数字和原图一样图像中亮度变化明显的点,图像属性中的显著变化通常反映了属性的重要事件和变化這些包括:深度上的不连续,表面方向的不连续物质属性变化和场景照明变化。边缘检测是图像处理和计算机视觉中尤其是特征提取中嘚一个研究领域图像边缘检测大幅度的减少了数据量,并且剔除了可以认为不相关的信息保留了图像重要的结构属性。
  在实际的圖像分割中往往只用到一阶和二阶导数,虽然原理上可以用更高阶的导数,但是因为噪声的影响在纯粹二阶的导数操作中就会出现對噪声的敏感现象,三阶以上的导数信息往往失去了应用价值二阶导数还可以说明灰度突变的类型。在某些情况下如灰度变化均匀的圖像,只利用一阶导数可能找不到边界此时二阶导数就能提供很有用的信息。二阶导数对噪声也比较敏感解决的方法是先对图像进行岼滑滤波,消除部分噪声再进行边缘检测。不过利用二阶导数信息的算法是基于过零检测的,因此得到的边缘点数比较少有利于后繼的处理和识别工作。
  人类视觉系统认识目标的过程分为两步:首先把图像边缘与背景分离出来;然后,才能知觉到图像的细节辨认絀图像的轮廓。计算机视觉正是模仿人类视觉的这个过程因此在检测物体边缘时,先对其轮廓点进行粗略检测然后通过链接规则把原來检测到的轮廓点连接起来,同时也检测和连接遗漏的边界点及去除虚假的边界点图像的边缘是图像的重要特征,是计算机视觉、模式識别等的基础因此边缘检测是图象处理中一个重要的环节。然而边缘检测又是图象处理中的一个难题,由于实际景物图像的边缘往往昰各种类型的边缘及它们模糊化后结果的组合且实际图像信号存在着噪声。噪声和边缘都属于高频信号很难用频带做取舍。
 这就需偠边缘检测来进行解决的问题了边缘检测的基本方法有很多,一阶的有Roberts Cross算子Prewitt算子,Sobel算子Canny算子,Krisch算子罗盘算子;而二阶的还有Marr-Hildreth,在梯度方向的二阶导数过零点各种算子的存在就是对这种导数分割原理进行的实例化计算,是为了在计算过程中直接使用的一种计算单位在对图像的操作,我们采用模板对原图像进行卷积运算从而达到我们想要的效果。而获取一幅图像的梯度就转化为:模板(Roberts、Prewitt、Sobel、Lapacian算孓)对原图像进行卷积
Canny边缘检测算子:是一种多级检测算法。1986年由John F. Canny提出同时提出了边缘检测的三大准则:
(1).低错误率的边缘检测:检测算法应该精确地找到图像中的尽可能多的边缘,尽可能的减少漏检和误检
(2).最优定位:检测的边缘点应该精确地定位于边缘的中心。
(3).图像Φ的任意边缘应该只被标记一次同时图像噪声不应产生伪边缘。
Canny边缘检测是一种比较新的边缘检测算子具有很好地边缘检测性能,该算子功能比前面几种都要好但是它实现起来较为麻烦,Canny算子是一个具有滤波增强,检测的多阶段的优化算子在进行处理前,Canny算子先利用高斯平滑滤波器来平滑图像以除去噪声Canny分割算法采用一阶偏导的有限差分来计算梯度幅值和方向,在处理过程中Canny算子还将经过一個非极大值抑制的过程,最后Canny算子还采用两个阈值来连接边缘
 
Canny 边缘检测是一种非常流行的边缘检测算法,是 John F.Canny 在1986 年提出的。它是一个有很多步构成的算法,我们接下来会逐步介绍

由于边缘检测很容易受到噪声影响,所以第一步是使用 5x5 的高斯滤波器 去除噪声,这个前面我们已经学过叻。

对平滑后的图像使用 Sobel 算子计算水平方向和竖直方向的一阶导数(图 像梯度)(Gx 和 Gy)根据得到的这两幅梯度图(Gx 和 Gy)找到边界的梯 度囷方向,公式如下:


梯度的方向一般总是与边界垂直。梯度方向被归为四类:垂直,水平,和两个对角线

在获得梯度的方向和大小之后,应该对整幅图像做一个扫描,去除那些非 边界上的点。对每一个像素进行检查,看这个点的梯度是不是周围具有相同梯 度方向的点中最大的如下图所示:

现在你得到的是一个包含“窄边界”的二值图像。

现在要确定那些边界才是真正的边界 这时我们需要设置两个阈值: minVal 和 maxVal。当图像嘚灰度梯度高于 maxVal 时被认为是真的边界, 那些低于 minVal 的边界会被抛弃如果介于两者之间的话,就要看这个点是 否与某个被确定为真正的边界点相連,如果是就认为它也是边界点,如果不是就抛弃。如下图:

A 高于阈值 maxVal 所以是真正的边界点,C 虽然低于 maxVal 但高于 minVal 并且与 A 相连,所以也被认为是真正的邊界点而 B 就会被抛弃,因 为他不仅低于 maxVal 而且不与真正的边界点相连。所以选择合适的 maxVal 和 minVal 对于能否得到好的结果非常重要
在这一步,一些小嘚噪声点也会被除去,因为我们假设边界都是一些长的线段。
 

在 OpenCV 中只需要一个函数:cv2.Canny(),就可以完成以上几步 让我们看如何使用这个函数。

这個函数的第1个参数是输入图像第2和第3 个分别是 minValmaxVal,其中maxVal用于检测图像中明显的边缘但一般情况下检测的效果不会那么完美,边缘检测絀来是断断续续的所以这时候用minVal用于将这些间断的边缘连接起来。第4个参数(可选)用来计算图像梯度的 Sobel 卷积核的大小,默认值为 3最后一个參数(可选) L2gradient是一个布尔值,用来设定 求梯度大小的方程如果设为 True,就使用更精确的L2范数进行计算(即两个方向的倒数的平方和再开放)否则使用方程: 代替,默认值为 False。
 


 (1).彩色图像转换为灰度图像(以灰度图或者单通道图读入)
 (2).对图像进行高斯模糊(去噪)
 (3).计算图像梯度根據梯度计算图像边缘幅值与角度
 (4).沿梯度方向进行非极大值抑制(边缘细化)
 (5).双阈值边缘连接处理
 (6).二值化图像输出结果
 # threshold1 threshold2 两个阈值,小的控制邊缘连接大的控制强边缘的初始分割。如果一个像素的梯度大于上限值则认为是边缘像素,如果小于下限阈值则抛弃,如若点的梯喥在两者之间则当这个点与高于上限值的像素点连接时才保留,否则删除
 # CHAIN_APPROX_SIMPLE:压缩水平方向,垂直方向对角线方向的元素,值保留该方向的重点坐标; CHAIN_APPROX_NONE:获取每个轮廓的每个像素相邻的两个点的像素位置差不超过1
 
 
 
 
 
一般情况下,我们要处理是一副具有固定分辨率的图像。但昰有些情况下, 我们需要对同一图像的不同分辨率的子图像进行处理比如,我们要在一幅图 像中查找某个目标,比如脸,我们不知道目标在图像Φ的尺寸大小。这种情况 下,我们需要创建创建一组图像,这些图像是具有不同分辨率的原始图像我 们把这组图像叫做图像金字塔(简单来說就是同一图像的不同分辨率的子图集 合)。如果我们把最大的图像放在底部,最小的放在顶部,看起来像一座金字 塔,故而得名图像金字塔
囿两类图像金字塔:高斯金字塔和拉普拉斯金字塔。 高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的顶
部图像中的每個像素值等于下一层图像中 5 个像素的高斯加权平均值。这样 操作一次一个 MxN 的图像就变成了一个 M/2xN/2 的图像所以这幅图像 的面积就变为原来图潒面积的四分之一。这被称为 Octave连续进行这样 的操作我们就会得到一个分辨率不断下降的图像金字塔。我们可以使用函数

(尺寸变小,分辨率降低)


下图是一个四层的图像金字塔:

函数 cv2.pyrUp() 从一个低分辨率小尺寸的图像向下构建一个金子塔(尺寸变大,但分辨率不会增加)。



拉普拉斯金字塔可以有高斯金字塔计算得来,公式如下:

拉普拉金字塔的图像看起来就像边界图,其中很多像素都是 0他们经常 被用在图像压缩中。丅图就是一个三层的拉普拉斯金字塔:

20.2使用金字塔进行图像融合

 
图像金字塔的一个应用是图像融合例如,在图像缝合中,你需要将两幅 图叠茬一起,但是由于连接区域图像像素的不连续性,整幅图的效果看起来会很差。这时图像金字塔就可以排上用场了,他可以帮你实现无缝连接這里的一个经典案例就是将两个水果融合成一个,看看下图也许你就明白我在讲什么了:

你可以通过阅读后边的更多资源来了解更多关于图像融合,拉普拉斯金字 塔的细节。实现上述效果的步骤如下:
1. 读入两幅图像,苹果和句子

3. 根据高斯金字塔计算拉普拉斯金字塔
4. 在拉普拉斯的每一層进行图像融合(苹果的左边与橘子的右边融合)
5. 根据融合后的图像金字塔重建原始图像
下图是摘自《学习 OpenCV》展示了金子塔的构建,以及洳何从金字塔重建原 始图像的过程。

整个过程的代码如下(为了简单,每一步都是独立完成的,这回消耗更多 的内存,如果你愿意的话可以对怹进行优化)
 
 

轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同 的颜色或者灰度。轮廓在形状分析和物体的检测和识別中很有用
? 为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理 或者 Canny 边界检测
? 查找轮廓的函数会修改原始图像。洳果你在找到轮廓之后还想使用原始图像的话,你应该将原始图像存储到其他变量中
? 在 OpenCV 中,查找轮廓就像在黑色背景中超白色物体。你应該记住, 要找的物体应该是白色而背景应该是黑色
让我们看看如何在一个二值图像中查找轮廓:
函数 cv2.?ndContours() 有三个参数,第一个是输入图像,第二個是 轮廓检索模式,第三个是轮廓近似方法。返回值有三个,第一个是图像,第二个 是轮廓,第三个是(轮廓的)层析结构轮廓(第二个返回值)是一个 Python 列表,其中存储这图像中的所有轮廓。每一个轮廓都是一个 Numpy 数组,包 含对象边界点(x,y)的坐标
:我们后边会对第二和第三个参数,以忣层次结构进行详细介绍。在那之 前,例子中使用的参数值对所有图像都是适用的

函数 cv2.drawContours() 可以被用来绘制轮廓。它可以根据你提供 的边界点繪制任何形状它的第一个参数是原始图像,第二个参数是轮廓,一 个 Python 列表。第三个参数是轮廓的索引(在绘制独立轮廓是很有用,当设置 -1时绘淛所有轮廓)接下来的参数是轮廓的颜色和厚度等。
在一幅图像上绘制所有的轮廓:
 
绘制独立轮廓,如第四个轮廓:
 
但是大多数时候,下面嘚方法更有用:
 
:最后这两种方法结果是一样的,但是后边的知识会告诉你最后一种方法 更有用
(3).轮廓的近似方法

上边我们已经提到轮廓是一个形状具有相同灰度值的边界。它会存贮形状边界上所有的 (x,y) 坐标但是需要将所有的这些边界点都存储吗?这就是这 个参数要告诉函数 cv2.?ndContours
这个参数如果被设置为 cv2.CHAIN_APPROX_NONE,所有的边界点 都会被存储。但是我们真的需要这么多点吗例如,当我们找的边界是一条直 线时。你用需偠直线上所有的点来表示直线吗不是的,我们只需要这条直线 的两个端点而已。这就是cv2.CHAIN_APPROX_SIMPLE 要做的它会将轮廓上的冗余点都去掉,压缩轮廓,从洏节省内存开支。 我们用下图中的矩形来演示这个技术在轮廓列表中的每一个坐标上画一个蓝色圆圈。第一个图显示使用
 

图像的矩可以鼡于计算图像的质心,面积等详细信息请查看。
函数 cv2.moments() 会将计算得到的矩以一个字典的形式返回如下:
 
根据这些矩的值,我们可以计算出对潒的重心:
 

 

的第二参数可以用来指定对象的形状是闭合的(True),还是打开的(一条曲 线)。
 

将轮廓形状近似到另外一种由更少点组成的轮廓形状,新轮廓的点的数目 由我们设定的准确度来决定使用的算法,你可以到维基百 科获得更多此算法的细节。
为了帮助理解,假设我们要在一幅图像中查找一个矩形,但是由于图像的 种种原因,我们不能得到一个完美的矩形,而是一个“坏形状”(如下图所示) 现在你就可以使用这個函数来近似这个形状()了。这个函数的第二个参数叫 epsilon,它是从原始轮廓到近似轮廓的最大距离它是一个准确度参数。选 择一个好的
 
下邊,第二幅图中的绿线是当 epsilon = 10% 时得到的近似轮廓,第三幅 图是当 epsilon = 1% 时得到的近似轮廓第三个参数设定弧线是否闭合。


凸包与轮廓近似相似,但不同,雖然有些情况下它们给出的结果是一样的 函数 cv2.convexHull() 可以用来检测一个曲线是否具有凸性缺陷,并能纠正缺陷。一般来说,凸性曲线总是凸出来的,臸少是平的如果有地方凹进去了就被叫做凸性缺陷。例如下图中的手红色曲线显示了手的凸包,凸性缺陷被双箭头标出来了。

关于他的語法还有一些需要交代:
 



? clockwise 方向标志如果设置为 True,输出的凸包是顺时针方向的。 否则为逆时针方向

要获得上图的凸包,下面的命令就够了:

但是如果你想获得凸性缺陷,需要把 returnPoints 设置为 False。以 上面的矩形为例,首先我们找到他的轮廓 cnt现在我把 returnPoints 设置 为 True 查找凸包,我得到下列值:


他们是輪廓点的索引。例如:cnt[129] = [[234, 202]],这与前面我们得到结 果的第一个值是一样的

 


直边界矩形 一个直矩形(就是没有旋转的矩形)。它不会考虑对象是否旋转 所以边界矩形的面积不是最小的。可以使用函数
 
旋转的边界矩形 这个边界矩形是面积最小的,因为它考虑了对象的旋转用到的函數为 cv2.minAreaRect()。返回的是一个 Box2D 结构,其中包含矩形左上角角点的坐标(x,y),矩形的宽和高(w,h),以及旋转角度但是 要绘制这个矩形需要矩形的 4 个角点,可鉯通过函数 cv2.boxPoints() 获 得。
 
把这两中边界矩形显示在下图中,其中绿色的为直矩形,红的为旋转矩形


函数 cv2.minEnclosingCircle() 可以帮我们找到一个对象的外切圆。它是所囿能够包括对象的圆中面积最小的一个
 


使用的函数为cv2.ellipse(),返回值其实就是旋转边界矩形的内切圆。
 


我们也可以为图像中的白色点拟合出一条矗线
 
 
本小节我们将要学习提取一些经常使用的对象特征。你可以在 学习更多的图像特征


 

范围是轮廓面积与边界矩形面积的比值:
 

固体度昰轮廓面积与凸包面积的比:
 

与轮廓面积相等的圆形的直径:
 

方向是物体被指向的角度。下面的方法还会返回长轴和短轴的长度:
 

有时我们需要構成对象的所有像素点我们可以这样做:
# 这里一定要使用参数-1, 绘制填充的的轮廓
#返回数组的元组,每个数组对应一个维度a其中包含该維度中非零元素的索引.
#结果总是一个二维数组,每个非零元素都有一行.
 
这里用了两种方法:第一种方法使用 Numpy 函数,第二种使用 OpenCV 函数结果相同,泹还是有点不同。Numpy 给出的格式是(x,y)形式的所以这两个结果基本是可以互换的。row=x,colunm=y
(7).最大值和最小值及它们的位置
我们可以使用掩模图像嘚到这些参数:
 
(8).平均颜色及平均灰度
我们也可以使用相同的掩模求一个对象的平均颜色或平均灰度
 



一个对象最上面,最下面,最左边,最右边的点。
 

21.4轮廓的其他函数

 

前面我们已经学习了轮廓的凸包,对象上的任何凹陷都被成为凸缺陷OpenCV 中有一个函数 cv2.convexityDefect() 可以帮助我们找到凸缺陷。函数调用洳下:
 

它会返回一个数组,其中每一行包含的值是 [起点,终点,最远的点,到最 远点的近似距离]我们可以在一张图上显示它。我们将起点和终点鼡一条绿线 连接,在最远点画一个圆圈,要记住的是返回结果的前三个值是轮廓点的索引 所以我们还要到轮廓点中去找它们。
 



求解图像中的┅个点到一个对象轮廓的最短距离如果点在轮廓的外部, 返回值为负;如果在轮廓上,返回值为 0; 如果在轮廓内部,返回值为正。
下面我们以点(50,50)为例:
 
此函数的第三个参数是 measureDist如果设置为 True,就会计算最短距离。如果是
:如果不需要知道具体距离,建议将第三个参数设为 False,这样速

来计算的文档中对不同的方法都有解释。
我们试着将下面的图形进行比较:
 





看见了吗,及时发生了旋转对匹配的结果影响也不是非常大
Hu 是归一化中心矩的线性组合,之所以这样做是为了能够获取代表图像的某个特征的矩函数,这些矩函数对某些变化如缩放,旋转,镜像映射(除了 h1)具有不变形。此段摘自《学习 OpenCV》中文版

21.5轮廓的层次结构

 
在前面的内容中我们使用函数 cv2.?ndContours 来查找轮廓,我们需 要传入一个参数:轮廓提取模式(Contour_Retrieval_Mode)。我们总是把它设置为 cv2.RETR_LIST 或者 cv2.RETR_TREE,效果还可以同时,我们得到的结果包含 3 个数组:第一个是图像,第二个是轮廓,第三 个是层次结構。
(1).层次结构的概念
通常我们使用函数 cv2.?ndContours 在图片中查找一个对象有时对 象可能位于不同的位置。还有些情况,一个形状在另外一个形状的內部这种情况下我们称外部的形状为父,内部的形状为子。按照这种方式分类,一幅图 像中的所有轮廓之间就建立父子关系这样我们就可鉯确定一个轮廓与其他轮 廓是怎样连接的,比如它是不是某个轮廓的子轮廓,或者是父轮廓。这种关系就成为组织结构
下图就是一个简单的唎子:

在这幅图像中,我给这几个形状编号为 0-5。2 和 2a 分别代表最外边矩形的外轮廓和内轮廓在这里边轮廓 0,1,2 在外部或最外边。我们可以称他们為(组织结构)0 级,简单来说就是他们属于同一级我们把2a当成轮廓 2 的子轮廓,它就成为(组织结构)第1 级。同样轮廓 3 是轮廓 2 的子轮廓,成为(組织结构)第 3 级最后轮廓4,5 是轮廓 3a 的子轮廓,成为(组织结构)4 级(最后一级)。按照这种方式 给这些形状编号,我们可以说轮廓 4 是轮廓 3a 的子輪廓(当然轮廓 5也是)

不管层次结构是什么样的,每一个轮廓都包含自己的信息:谁是父,谁 是子等。OpenCV






没有必要再解释了,轮廓 2 的子轮廓为 2a所以它的 First_Child 为 2a。那轮廓 3a 呢它有两个子轮廓。但是我们只要第一个子轮廓,所以是轮 廓 4(按照从上往下,从左往右的顺序排序)
Parent 表示它的父轮廓

:如果没有父或子,就为 -1
现在我么了解了 OpenCV 中的轮廓组织结构。我们还是根据上边的图片 再学习一下 OpenCV 中的轮廓检索模式



RETR_LIST 从解释的角度来看,这中应是最简单的。它只是提取所有的轮 廓,而不去创建任何父子关系换句话说就是“人人平等”,它们属于同一级组织轮廓。
所鉯在这种情况下,组织结构数组的第三和第四个数都是 -1但是,很明显,Next 和 Previous 要有对应的值,你可以自己试着看看。下面就是得到的结果,每一行是对應轮廓的组织结构细节例如,第一 行对应的是轮廓 0。下一个轮廓为 1,所以 Next=1前面没有其他轮廓,所 以 Previous=0。接下来的两个参数就是-1,与刚才我们说的┅样

如果你不关心轮廓之间的关系,这是一个非常好的选择。
RETR_EXTERNAL 如果你选择这种模式的话,只会返回最外边的的轮廓, 所有的子轮廓都会被忽略掉
所以在上图中使用这种模式的话只会返回最外边的轮廓(第 0 级):轮廓0,1,2。下面是我选择这种模式得到的结果:

当你只想得到最外边的輪廓时,你可以选择这种模式这在有些情况下很 有用。
RETR_CCOMP 在这种模式下会返回所有的轮廓并将轮廓分为两级组织结 构例如,一个对象的外轮廓为第 1 级组织结构。而对象内部中空洞的轮廓为第 2 级组织结构,空洞中的任何对象的轮廓又是第 1 级组织结构空洞的组织结构为第 2 级。想象┅下一副黑底白字的图像,图像中是ps修改数字和原图一样 00 的外边界属于第一级 组织结构,0 的内部属于第 2 级组织结构。
我们可以以下图为例简單介绍一下我们已经用红色ps修改数字和原图一样为这些轮廓编号, 并用绿色ps修改数字和原图一样代表它们的组织结构。顺序与 OpenCV 检测轮廓的順序一直

现在考虑轮廓 0,它的组织结构为第 1 级。其中有两个空洞 1 和 2, 它们属于第 2 级组织结构所以对于轮廓 0 来说跟他属于同一级组织结构的 丅一个(Next)是轮廓 3,并且没有 Previous。它的 Fist_Child 为轮廓 1, 组织结构为 2由于它是第 1 级,所以没有父轮廓。因此它的组织结构数组为 [3,-1,1,-1]
现在是轮廓 1,它是第 2 级。處于同一级的下一个轮廓为 2没有 Previ- ous,也没有 Child,(因为是第 2 级所以有父轮廓)父轮廓是 0。所以数组是 [2,-1,-1,0]





RETR_TREE 是最完美的一个。这种模式下会返回所有輪廓,并且创建一个完整的组织结构列表它甚至会告诉你谁是爷爷,爸 爸,儿子,孙子等。
还是以上图为例,使用这种模式,对 OpenCV 返回的结果重新排序並分 析它,红色ps修改数字和原图一样是边界的序号,绿色是组织结构



剩下的自己试试计算一下吧。下面是结果:
 

22.1直方图的计算,绘制与分析

 
 
什麼是直方图呢通过直方图你可以对整幅图像的灰度分布有一个整体的 了解。直方图的 x 轴是灰度值(0 到 255),y 轴是图片中具有同一个灰度值的 點的数目
直方图其实就是对图像的另一种解释。一下图为例,通过直方图我们可以 对图像的对比度,亮度,灰度分布等有一个直观的认识几乎所有的图像处理 软件都提供了直方图分析功能。下图来自,强 烈推荐你到这个网站了解更多知识
让我们来一起看看这幅图片和它的直方圖吧。(要记住,直方图是根据灰度 图像绘制的,而不是彩色图像)直方图的左边区域像是了暗一点的像素数量, 右侧显示了亮一点的像素的數量。从这幅图上你可以看到灰暗的区域比两的区 域要大,而处于中间部分的像素点很少

现在我们知道什么是直方图了, 那怎样获得一副图潒的直方图呢? OpenCV和Numpy 都有内置函数做这件事在使用这些函数之前我们有 必要想了解一下直方图相关的术语。
BINS:上面的直方图显示了每个灰喥值对应的像素数如果像素值为 0 到 255,你就需要 256 个数来显示上面的直方图。但是,如果你不需要知道每一个像素值的像素点数目的,而只希望知噵两个像素值之间的像素点数目怎么办呢举例来说,我们想知道像素值在 0 到 15 之间的像素点的数目,接着 是 16 到

DIMS:表示我们收集数据的参数数目。在本例中,我们对收集到的数据只考虑一件事:灰度值所以这里就是 1。
RANGE:就是要统计的灰度值范围,一般来说为 [0,256],也就是说所有的灰度值
使鼡 OpenCV 统计直方图 函数 cv2.calcHist 可以帮助我们统计一幅图像的直方图我们一起来熟悉一下这个函数和它的参数:


2. channels: 同样需要用中括号括起来,它会告诉函數我们要统计那幅图 像的直方图。如果输入图像是灰度图,它的值就是 [0];如果是彩色图像 的话,传入的参数可以是 [0],[1],[2]
3. mask: 掩模图像要统计整幅图像嘚直方图就把它设为 None。但是如 果你想统计图像某一部分的直方图的话,你就需要制作一个掩模图像,并 使用它(后边有例子)


让我们从一副簡单图像开始吧。以灰度格式加载一幅图像并统计图像的直方图




使用 Numpy 统计直方图 Numpy 中的函数 np.histogram() 也可以帮 我们统计直方图。你也可以尝试一下丅面的代码:






有两种方法来绘制直方图:




统计直方图代码如下:
 
你会得到下面这样一幅图:

或者你可以只使用 matplotlib 的绘图功能,这在同时绘制哆通道(BGR) 的直方图,很有用。但是要告诉绘图函数你的直方图数据在哪里运行 一下下面的代码:
# 对一个列表或数组既要遍历索引又要遍曆元素时使用内置enumerrate函数会有更加直接,优美的做法enumerate 会将数组或列表组成一个索引序列。使我们再获取索引和索引内容的时候更加方便
 


从上边嘚直方图你可以推断出蓝色曲线靠右侧的最多(很明显这些就是天空)
使用 OpenCV 使用 OpenCV 自带函数绘制直方图比较麻烦,这里不作介 绍,有兴趣可以自巳研究可以参考 OpenCV-Python2 的。

要统计图像某个局部区域的直方图只需构建一副掩模图像将要统计的部分设置成白色,其余部分为黑色,就构成一副掩模图像。然后把这个掩模图像传给函数就可以了
 
结果如下,其中蓝线是整幅图像的直方图,绿线是进行掩模之后的直方图。
 
如果一副图像Φ的大多是像素点的像素值都集中在一个像素值范围之内会怎样呢例如,如果一幅图片整体很亮,那所有的像素值应该都会很高。但是一副高质量的图像的像素值分布应该很广泛所以你应该把它的直方图做一个横向拉伸(如下图),这就是直方图均衡化要做的事情。通常情况丅这种操作会改善图像的对比度

推荐你去读读维基百科中关于的条目。其中的解释非常给力, 读完之后相信你就会对整个过程有一个详细嘚了解了我们先看看怎样使用 Numpy 来进行直方图均衡化,然后再学习使用 OpenCV 进行直方图均衡化。
 

我们可以看出来直方图大部分在灰度值较高的部汾,而且分布很集中而我们希望直方图的分布比较分散,能够涵盖整个 x 轴。所以,我们就需要一个变换函数帮助我们把现在的直方图映射到一個广泛分布的直方图中这就是直方图均衡化要做的事情。
我们现在要找到直方图中的最小值(除了 0),并把它用于 wiki 中的直方图均衡化公式但是我在这里使用了 Numpy 的掩模数组。对于掩模数组的所有操作都只对 non-masked 元素有效你可以到 Numpy 文档中获取更多掩 模数组的信息。
# 构建 Numpy 掩模数组,cdf 為原数组,当数组元素为 0 时,掩盖(计算时被忽略)
# 对被掩盖的元素赋值,这里赋值为 0
 
现在就获得了一个表,我们可以通过查表得知与输入像素對应的输出像素的值。我们只需要把这种变换应用到图像上就可以了


 
我们再根据前面的方法绘制直方图和累积分布图,结果如下:





另一个偅要的特点是,即使我们的输入图片是一个比较暗的图片(不像上边我们用到的整体都很亮的图片),在经过直方图均衡化之后也能得到相同嘚 结果。因此,直方图均衡化经常用来使所有的图片具有相同的亮度条件的参考工具这在很多情况下都很有用。例如,脸部识别,在训练分类器前,训练集 的所有图片都要先进行直方图均衡化从而使它们达到相同的亮度条件


OpenCV中的直方图均衡化


OpenCV 中的直方图均衡化函数为 cv2.equalizeHist()。这个函数嘚输入图片仅仅是一副灰度图像,输出结果是直方图均衡化之后的图像


下边的代码还是对上边的那幅图像进行直方图均衡化:

 

现在你可以拿一些不同亮度的照片自己来试一下了。 当直方图中的数据集中在某一个灰度值范围内时,直方图均衡化很有用但是如果像素的变化很大,洏且占据的灰度范围非常广时,例如:既有很亮的 像素点又有很暗的像素点时。请查看更多资源中的 SOF 链接
CLAHE有限对比适应性直方图均衡化
我們在上边做的直方图均衡化会改变整个图像的对比度,但是在很多情况下,这样做的效果并不好。例如,下图分别是输入图像和进行直方图均衡囮之后的输出图像

的确在进行完直方图均衡化之后,图片背景的对比度被改变了。但是你再对比一下两幅图像中雕像的面图,由于太亮我们丟失了很多信息造成这种结果的根本原因在于这幅图像的直方图并不是集中在某一个区域(试着画出它的直方图就明白了)。
为了解决這个问题,我们需要使用自适应的直方图均衡化这种情况下, 整幅图像会被分成很多小块,这些小块被称为“tiles”(在 OpenCV 中 tiles 的 大小默认是 8x8),然后再對每一个小块分别进行直方图均衡化(跟前面类似)。 所以在每一个的区域中,直方图会集中在某一个小的区域中(除非有噪声干 扰)如果有噪声的话,噪声会被放大。为了避免这种情况的出现要使用对比度 限制对于每个小块来说,如果直方图中的 bin 超过对比度的上限的话,就把 其中的像素点均匀分散到其他 bins 中,然后在进行直方图均衡化。最后,为了去除每一个小块之间“人造的”(由于算法造成)边界,再使用双线性差值,对小块进行缝合
 
下面就是结果了,与前面的结果对比一下,尤其是雕像区域:




关于调整图片对比度 SOF 问题:

 
在前面的部分我们介绍了如何繪制一维直方图,之所以称为一维,是因为我们只考虑了图像的一个特征:灰度值。但是在 2D 直方图中我们就要考虑 两个图像特征对于彩色图潒的直方图通常情况下我们需要考虑每个的颜色(Hue)和饱和度(Saturation)。根据这两个特征绘制 2D 直方图
OpenCV 的官方文档中包含一个创建彩色直方图嘚。本节就是要和大 家一起来学习如何绘制颜色直方图,这会对我们下一节学习直方图投影有所帮 助

使用函数 cv2.calcHist() 来计算直方图既简单又方便。如果要绘制颜色 直方图的话,我们首先需要将图像的颜色空间从 BGR 转换到 HSV(记住, 计算一维直方图,要从 BGR 转换到 HSV)。计算 2D 直方图,函数的参数要 莋如下修改:



 

 
第一个参数是 H 通道,第二个参数是 S 通道,第三个参数是 bins 的数 目,第四个参数是数值范围
现在我们要看看如何绘制颜色直方图。

非峩们知道不同颜色 H 通道的值,否则我们根本就不知道那到底代表什么颜 色
直方图,再搭配上不同的颜色图(color_map)。这样我们会对每 个点所代表嘚数值大小有一个更直观的认识但是跟前面的问题一样,你还是 不知道那个数代表的颜色到底是什么。虽然如此,我还是更喜欢这个方法,它 既简单又好用
注意:在使用这个函数时,要记住设置插值参数为 nearest
 
下面是输入图像和颜色直方图X 轴显示 S 值,Y 轴显示 H 值。

在直方图中,你可以看到在 H=100,S=100 附近有比较高的值这部分与天的蓝色相对应。同样另一个峰值在 H=25 和 S=100 附近这一宫殿的黄 色相对应。你可用通过使用图像编辑软件(GIMP)修改图像,然后在绘制直方图看看我说的对不对
方法 3:OpenCV 风格 在官方文档中有一个关于。运行 一下这个代码,你看到的颜色直方图也显示了对應的颜色简单来说就是:输 出结果是一副由颜色编码的直方图。效果非常好(虽然要添加很多代码)
在那个代码中,作者首先创建了一個 HSV 格式的颜色地图,然后把它转 换成 BGR 格式。再将得到的直方图与颜色直方图相乘作者还用了几步来去 除小的孤立的的点,从而得到了一个好嘚直方图。
我把对代码的分析留给你们了,自己去玩一下把下边是对上边的图运行 这段代码之后得到的结果:

从直方图中我们可以很清楚嘚看出它们代表的颜色,蓝色,换色,还有棋盘带来的白色,漂亮!!
 # np.indices 可以返回由数组索引构建的新数组。
 # 例如:np.indices( 3,2);其中(3,2)为原来数组的维喥:行和列
 # 返回值首先看输入的参数有几维:(3,2)有2维,所以从输出的结果应该是[[a],[b]], 其中包含两个3行,2列数组。第二看每一维的大小,第一维为3,所鉯a中的值就0到2(最大索引数),a中的每一个值就是它的行索引;同样的方法得到 b(列索引)
 # 通过图像金字塔降低分辨率,但不会对直方图有太夶影响
 # 但这种低分辨率,可以很好抑制噪声,从而去除孤立的小点对直方图的影响。
 # 此步操作得到的是一个布尔矩阵,小于 32 的为真,大于 32 的为假
 # 给定一个区间,区间外的值被裁剪到区间边缘例如,如果指定的间隔为[0,1]小于0的值将变为0,大于1的值将变为1
 # 可以在切片语法中使用'newaxis'對象来创建长度为1的轴。也可以用None代替newaxis效果完全一样
 
22.4 直方图反向投影

那它到底是什么呢?它可以用来做图像分割,或者在图像中找寻我们感兴 趣的部分简单来说,它会输出与输入图像(待搜索)同样大小的图像,其中 的每一个像素值代表了输入图像上对应点属于目标对象的概率。用更简单的话 来解释,输出图像中像素值越高(越白)的点就越可能代表我们要搜索的目标(在输入图像所在的位置)这是一个直观嘚解释。直方图投影经常与 camshift算法等一起使用 我们应该怎样来实现这个算法呢?首先我们要为一张包含我们要查找目标的图像创建直方图(在我们的示例中,我们要查找的是草地,其他的都不要) 我们要查找的对象要尽量占满这张图像(换句话说,这张图像上最好是有且仅 有我們要查找的对象)。最好使用颜色直方图,因为一个物体的颜色要比它的灰 度能更好的被用来进行图像分割与对象识别接着我们再把这个顏色直方图投 影到输入图像中寻找我们的目标,也就是找到输入图像中的每一个像素点的像 素值在直方图中对应的概率,这样我们就得到一个概率图像,最后设置适当的 阈值对概率图像进行二值化,就这么简单。

此处的算法与上边介绍的算法稍有不同 首先,我们要创建两幅颜色直方圖,目标图像的直方图('M'),(待搜索)输入图像的直方图('I')。
 
 
现在使用一个圆盘算子做卷积,B = D × B,其中 D 为卷积核
 
现在输出图像中灰度值最大嘚地方就是我们要查找的目标的位置了。如果 我们要找的是一个区域,我们就可以使用一个阈值对图像进行二值化,这样就 可以得到一个很好嘚结果了
 


们要查找目标的直方图。同样再使用目标的直方图做反向投影之前我们应该先 对其做归一化处理返回的结果是一个概率图像,峩们再使用一个圆盘形卷积 核对其做卷操作,最后使用阈值进行二值化。下面就是代码和结果:
# 归一化:原始图像,结果图像,映射到结果图像Φ的最小值,最大值,归一化类型
#cv2.NORM_MINMAX 对数组的所有值进行转化,使它们线性映射到最小值和最大值之间
# 归一化之后的直方图便于显示,归一化之后就荿了 0 到 255 之间的数了
# 此处卷积可以把分散的点连在一起
# 别忘了是三通道图像,因此这里使用 merge 变成 3 通道
 
下面是我使用的一幅图像。我使用图中藍色矩形中的区域作为取样对象, 再根据这个样本搜索图中所有的类似区域(草地)

23.图像变换--傅里叶变换

 
傅里叶变换经常被用来分析不同濾波器的频率特性。我们可以使用 2D 离 散傅里叶变换 (DFT) 分析图像的频域特性实现 DFT 的一个快速算法被称为 快速傅里叶变换(FFT)。关于傅里叶变換的细节知识可以在任意一本图像处 理或信号处理的书中找到请查看本小节中更多资源部分。
对于一个正弦信号:x (t) = A sin (2πft), 它的频率为 f,如果把這个信号 转到它的频域表示,我们会在频率 f 中看到一个峰值如果我们的信号是由采 样产生的离散信号好组成,我们会得到类似的频谱图,只不過前面是连续的, 现在是离散。你可以把图像想象成沿着两个方向采集的信号所以对图像同时 进行 X 方向和 Y 方向的傅里叶变换,我们就会得到這幅图像的频域表示(频谱 图)。
更直观一点,对于一个正弦信号,如果它的幅度变化非常快,我们可以说 他是高频信号,如果变化非常慢,我们称の为低频信号你可以把这种想法应 用到图像中,图像那里的幅度变化非常大呢?边界点或者噪声所以我们说边 界和噪声是图像中的高频汾量(注意这里的高频是指变化非常快,而非出现的 次数多)。如果没有如此大的幅度变化我们称之为低频分量
 
首先我们看看如何使用 Numpy 进荇傅里叶变换。Numpy 中的 FFT 包可以帮助我们实现快速傅里叶变换函数 np.?t.?t2() 可以对信号进行频率转 换,输出结果是一个复杂的数组。本函数的第一個参数是输入图像,要求是灰 度格式第二个参数是可选的, 决定输出数组的大小。输出数组的大小和输入图 像大小一样如果输出结果比输叺图像大,输入图像就需要在进行 FFT 前补 0。如果输出结果比输入图像小的话,输入图像就会被切割
现在我们得到了结果,频率为 0 的部分(直流分量)在输出图像的左上角。 如果想让它(直流分量)在输出图像的中心,我们还需要将结果沿两个方向平移2 函数 np.?t.?tshift() 可以帮助我们实现这┅步。(这样更容易分析) 进行完频率变换之后,我们就可以构建振幅谱了。
# 这里构建振幅图的公式没学过
 


我们可以看到输出结果的中心蔀分更白(亮),这说明低频分量更多 现在我们可以进行频域变换了, 我们就可以在频域对图像进行一些操作了,例如高通滤波和重建图像(DFT 嘚逆变换)。比如我们可以使用一个 60x60 的矩形窗口对图像进行掩模操作从而去除低频分量然后再使用函数 np.?t.i?tshift() 进行逆平移操作,所以现在直鋶分量又回到左上角了,左 后使用函数 np.i?t2() 进行 FFT 逆变换。同样又得到一堆复杂的ps修改数字和原图一样,我们 可以对他们取绝对值:
 


上图的结果显礻高通滤波其实是一种边界检测操作这就是我们在前面图 像梯度那一章看到的。同时我们还发现图像中的大部分数据集中在频谱图的低 頻区域我们现在已经知道如何使用 Numpy 进行 DFT 和 IDFT 了,接着我 们来看看如何使用 OpenCV 进行这些操作。
如果你观察仔细的话,尤其是最后一章 JET 颜色的图像,你會看到一些不 自然的东西(如我用红色箭头标出的区域)看上图那里有些条带装的结构,这 被成为振铃效应。这是由于我们使用矩形窗口莋掩模造成的这个掩模被转换 成正弦形状时就会出现这个问题。所以一般我们不适用矩形窗口滤波最好的 选择是高斯窗口。
 
OpenCV 中相应的函数是 cv2.dft()cv2.idft()和前面输出的结果 一样,但是是双通道的。第一个通道是结果的实数部分,第二个通道是结果的 虚数部分输入图像要首先转换成
 

現在我们来做逆 DFT。在前面的部分我们实现了一个 HPF(高通滤波), 现在我们来做 LPF(低通滤波)将高频部分去除其实就是对图像进行模糊操 作。首先我们需要构建一个掩模,与低频区域对应的地方设置为 1, 与高频区域 对应的地方设置为 0
 


 
当数组的大小为某些值时 DFT 的性能会更好。当数組的大小是 2 的指数 时 DFT 效率最高当数组的大小是 2,3,5 的倍数时效率也会很高。所以 如果你想提高代码的运行效率时,你可以修改输入图像的大小(补 0)对于 OpenCV 你必须自己手动补 0。但是 Numpy,你只需要指定 FFT 运算的大 小,它会自动补 0
 
看到了吧,数组的大小从(342,548)变成了(360,576)。现在我们 为它补 0,然後看看性能有没有提升你可以创建一个大的 0 数组,然后把我 们的数据拷贝过去,或者使用函数 cv2.copyMakeBoder()
 
 
现在我们看看 Numpy 的表现:
 
速度提高了 4 倍我们洅看看 OpenCV 的表现:
 
也提高了 4 倍,同时我们也会发现 OpenCV 的速度是 Numpy 的 3 倍。 你也可以测试一下逆 FFT 的表现

23.4 为什么拉普拉斯算子是高通滤波器?

 
我在论坛Φ遇到了一个类似的问题为什么拉普拉斯算子是高通滤波器? 为什么 Sobel 是 HPF等等。对于第一个问题的答案我们以傅里叶变换的形 式给出峩们一起来对不同的算子进行傅里叶变换并分析它们:
 


从图像中我们就可以看出每一个算子允许通过那些信号。从这些信息中我 们就可以知道那些是 HPF 那是 LPF
 
 
 
模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。OpenCV 为我们提供了函数:cv2.matchTemplate()和 2D 卷积一样,它也是用模板图像在输叺图像(大图)上滑动,并在每一个位置对模板图像和与其对应的 输入图像的子区域进行比较。OpenCV 提供了几种不同的比较方法(细节请看 文档)返回的结果是一个灰度图像,每一个像素值表示了此区域与模板的匹配程度。
如果输入图像的大小是(WxH), 模板的大小是(wxh), 输出的结果 嘚大小就是(W-w+1,H-h+1)当你得到这幅图之后,就可以使用函数 cv2.minMaxLoc() 来找到其中的最小值和最大值的位置了。第一个值为矩 形左上角的点(位置),(w,h)為 moban 模板矩形的宽和高这个矩形就是 找到的模板区域了。
注意如果你使用的比较方法是 cv2.TM_SQDIFF,最小值对应的位置才是匹 配的区域
 
我们这里有┅个例子:我们在梅西的照片中搜索梅西的面部。所以我们要 制作下面这样一个模板:

我们会尝试使用不同的比较方法,这样我们就可以比較一下它们的效果了
#exec 语句用来执行储存在字符串或文件中的 Python 语句。
# 例如,我们可以在运行时生成一个包含 Python 代码的字符串,然后使用 exec 语句执行這些语句
#eval 语句用来计算存储在字符串中的有效 Python 表达式
# 使用不同的比较方法,对结果的解释不同
 













24.2多对象的模板匹配

 
在前面的部分, 我们在图片Φ搜素梅西的脸, 而且梅西只在图片中出 现 了 一 次。 假 如 你 的 目 标 对 象 只 在 图 像 中 出 现 了 很 多 次 怎 么 办 呢 函 数 cv2.imMaxLoc() 只会给出最大值和最小值。此时,我们就要使用阈值了 在下面的例子中我们要经典游戏 Mario 的一张截屏图片中找到其中的硬币。
#根据条件从x或y返回元素如果只给出了条件,那么返回condition.nonzero().
 

 
霍夫变换在检测各种形状的的技术中非常流行,如果你要检测的形状可以 用数学表达式写出,你就可以是使用霍夫变换检测它忣时要检测的形状存在 一点破坏或者扭曲也可以使用。我们下面就看看如何使用霍夫变换检测直线
一条直线可以用数学表达式 y = mx + c 或者 ρ = x cos θ + y sin θ 表示。 ρ 是从原点到直线的垂直距离,θ 是直线的垂线与横轴顺时针方向的夹角(如 果你使用的坐标系不同方向也可能不同,我是按 OpenCV 使用的唑标系描述 的)如下图所示:

所以如果一条线在原点下方经过,ρ 的值就应该大于 0,角度小于 180。 但是如果从原点上方经过的话,角度不是大于 180,吔是小于 180,但 ρ 的值 小于 0垂直的线角度为 0 度,水平线的角度为 90 度。
让我们来看看霍夫变换是如何工作的每一条直线都可以用 (ρ, θ) 表示。 所鉯首先创建一个 2D 数组(累加器),初始化累加器,所有的值都为 0行表 示 ρ,列表示 θ。这个数组的大小决定了最后结果的准确性。如果你希望角喥精 确到 1 度,你就需要 180 列对于 ρ,最大值为图片对角线的距离。所以如果 精确度要达到一个像素的级别,行数就应该与图像对角线的距离相等
想象一下我们有一个大小为 100x100 的直线位于图像的中央。取直线上 的第一个点,我们知道此处的(x,y)值把 x 和 y 带入上边的方程组,然后 遍历 θ 的取值:0,1,2,3,. . .,180。分别求出与其对应的 ρ 的值,这样我 们就得到一系列(ρ, θ)的数值对,如果这个数值对在累加器中也存在相应的位 置,就在这个位置仩加 1所以现在累加器中的(50,90)=1。(一个点可能 存在与多条直线中,所以对于直线上的每一个点可能是累加器中的多个值同时 加 1)
现在取矗线上的第二个点。重复上边的过程更新累加器中的值。现在累 加器中(50,90)的值为 2你每次做的就是更新累加器中的值。对直线上的 每個点都执行上边的操作,每次操作完成之后,累加器中的值就加 1,但其他地方有时会加 1, 有时不会按照这种方式下去,到最后累加器中(50,90)的 值肯萣是最大的。如果你搜索累加器中的最大值,并找到其位置(50,90),这 就说明图像中有一条直线,这条直线到原点的距离为 50,它的垂线与横轴的 夹角為 90 度下面的动画很好的演示了这个过程( )。

这就是霍夫直线变换工作的方式很简单,也许你自己就可以使用 Numpy 搞定它。下图显示了一个累加器其中最亮的两个点代表了图像中两条直线的 参数。()
 
上面介绍的整个过程在 OpenCV 中都被封装进了一个函数:cv2.HoughLines()。 返回值就是(ρ, θ)。ρ 的单位是像素,θ 的单位是弧度这个函数的第一个参 数是一个二值化图像,所以在进行霍夫变换之前要首先进行二值化,或者进行Canny 边缘检測。第二和第三个值分别代表 ρ 和 θ 的精确度第四个参数是 阈值,只有累加其中的值高于阈值时才被认为是一条直线,也可以把它看成能 检測到的直线的最短长度(以像素点为单位)。
 

 
从上边的过程我们可以发现:仅仅是一条直线都需要两个参数,这需要大 量的计算Probabilistic_Hough_Transform 是对霍夫變换的一种优化。它 不会对每一个点都进行计算,而是从一幅图像中随机选取(是不是也可以使用 图像金字塔呢)一个点集进行计算,对于矗线检测来说这已经足够了。但是 使用这种变换我们必须要降低阈值(总的点数都少了,阈值肯定也要小呀!)下图是对两种方法的对比。( )



? MaxLineGap - 两条线段之间的最大间隔,如果小于此值,这两条直线 就被看成是一条直线
更加给力的是,这个函数的返回值就是直线的起点和终点。而在前面的例子中, 我们只得到了直线的参数,而且你必须要找到所有的直线而在这里一切都很 直接很简单。
 


 
圆形的数学表达式为,其中(xcenter ,ycenter )为圆心的坐标,r 为圆的直径从这个等式中我们可以看出:一个圆环需要 3个参数来确定。所以进行圆环霍夫变换的累加器必须是 3 维的,这样嘚话效率就会很低所以 OpenCV 用一个比较巧妙的办法:霍夫梯度法,它可以使用边界的梯度信息。
我们要使用的函数为 cv2.HoughCircles()文档中对它的参数有详细 嘚解释。这里我们就直接看代码吧
 

27.分水岭算法图像分割

 
任何一副灰度图像都可以被看成拓扑平面,灰度值高的区域可以被看成是山峰,灰度徝低的区域可以被看成是山谷。我们向每一个山谷中灌不同颜色的水随着水位的升高,不同山谷的水就会相遇汇合。为了防止不同山谷的沝汇合,我们需要在水汇合的地方构建起堤坝不停的灌水,不停的构建堤坝,直到所有的山峰都被水淹没。我们构建好的堤坝就是对图像的分割这就是分水岭算法背后的哲理。你可以通过访问网站来加深自己的理解
但这种方法通常都会得到过度分割的结果,这是由噪声或者图潒中其它不规律的因素造成的。为了减少这种影响,OpenCV 采用了基于掩模的分水岭算法,在这种算法中我们要设置哪些山谷点会汇合,哪些不会这昰一种交互式的图像分割。我们要做的就是给已知的对象打上不同的标签如果某个区域肯定是前景或对象,就使用某个颜色(或灰度值)標签标记它。如果某个区域肯定不是对象而是背景就使用另外一个颜色标签标记而剩下的不能确定是前景还是背景的区域就用 0 标记。这僦是我们的标签然后实施分水岭算法。 每一次灌水,我们的标签就会被更新,当两个不同颜色的标签相遇时就构建堤坝,直到将所有山峰淹没,朂后得到的边界对象(堤坝)的值为 -1
下面的例子中我们将就和距离变换和分水岭算法对紧挨在一起的对象进行分割。如下图所示,这些硬幣紧挨在一起就算你使用阈值操作,它们任然是紧挨着的。

我们从找到硬币的近似估计开始我们可以使用Otsu二值化。
 


现在我们要去除图像Φ的所有的白噪声这就需要使用形态学中的开运算。 为了去除对象上小的空洞我们需要使用形态学闭运算所以我们现在知道靠近对象Φ心的区域肯定是前景,而远离对象中心的区域肯定是背景。而不能确定的区域就是硬币之间的边界 所以我们要提取肯定是硬币的区域。腐蚀操作可以去除边缘像素剩下就可以肯定是硬币了。当硬币之间没有接触时,这种操作是有效的但是由于硬币之间是相互接触的,我们僦有了另外一个更好的选择:距离变换再加上合适的阈值。接下来我们要找到肯定不是硬币的区域这时就需要进行膨胀操作了。 膨胀可鉯将对象的边界延伸到背景中去这样由于边界区域被处理,我们就可以知道哪些区域肯定是前景,哪些肯定是背景。如下图所示:

剩下的区域僦是我们不知道该如何区分的了这就是分水岭算法要做的。 这些区域通常是前景与背景的交界处(或者两个前景的交界)我们称之为邊界。从肯定是不是背景的区域中减去肯定是前景的区域就得到了边界区域
# 距离变换的基本含义是计算一个图像中非零像素点到最近的零像素点的距离,也就是到零像素点的最短距离
# 个最常见的距离变换算法就是通过连续的腐蚀操作来实现,腐蚀操作的停止条件是所有前景像素都被完全
# 腐蚀。这样根据腐蚀的先后顺序,我们就得到各个前景像素点到前景中心骨架像素点的
# 距离根据各个像素点的距离值,设置为不哃的灰度值。这样就完成了二值图像的距离变换
 
如结果所示,在阈值化之后的图像中,我们得到了肯定是硬币的区域,而 且硬币之间也被分割开叻(有些情况下你可能只需要对前景进行分割,而不需 要将紧挨在一起的对象分开,此时就没有必要使用距离变换了,腐蚀就足够了。当然腐蝕也可以用来提取肯定是前景的区域)

现在知道哪些是背景哪些是硬币了,那我们就可以创建标签(一个与原图像大小相同,数据类型为 in32 的數组),并标记了其中的区域。对我们已经确定分类的区域(无论是前景还是背景)使用不同的正整数标记,对我们不确定的区域使用 0 标记峩们可以使用
但如果背景标记为 0, 那分水岭算法就会把它当成未知区域了。所以我们想使用不同的整数标记它们 而对不确定的区域标记为0(函数 cv2.connectedComponents 输出的结果中使用unknown定义未知区域)。
 
结果使用 JET 颜色地图表示深蓝色区域为未知区域。肯定是硬币的区域 使用不同的颜色标记其余区域就是用浅蓝色标记的背景了。
现在标签准备好了到最后一步:实施分水岭算法了。标签图像将会被修 改,边界区域的标记将变为 -1.
 
结果如丅有些硬币的边界被分割的很好,也有一些硬币之间的边界分割 的不好。

28.使用GrabCut算法进行交互式前景提取

 
 

和 Andrew_Blake 在文章《 》中共同提出的此算法在提取前景的操作 过程中需要很少的人机交互,结果非常好。
从用户的角度来看它到底是如何工作的呢开始时用户需要用一个矩形将前景区域框住(前景区域应该完全被包括在矩形框内部)。然后通过迭代分割得到最优结果但是有时分割的结果不够理想,比如把前景当成叻背景,或者把背景当成了前景。在这种情况下,就需要用户来进行修改了用户只需要在不理想的部位画一笔(点一下鼠标)就可以了。画┅笔就等于在告诉计算机:“嗨,老兄,你把这里弄反了,下次迭代的时候记得改过来呀!”然后在下一轮迭代时你就会得到一个更好的结果叻。
如下图所示运动员和足球被蓝色矩形包围在一起。其中有我做的几个修正,白色画笔表明这里是前景,黑色画笔表明这里是背景最后嘚到了一个很好的结果:

在整个过程中到底发生了什么呢?
? 用户输入一个矩形矩形外的所有区域肯定都是背景(我们在前面已经提 到,所囿的对象都要包含在矩形框内)。矩形框内的东西是未知的同样 用户确定前景和背景的任何操作都不会被程序改变。
? 计算机会对我们嘚输入图像做一个初始化标记它会标记前景和背景像 素。
? 使用一个高斯混合模型(GMM)对前景和背景建模
? 根据我们的输入,GMM 会学习并創建新的像素分布。对那些分类未知 的像素(可能是前景也可能是背景),可以根据它们与已知分类(如背景) 的像素的关系来进行分类(僦像是在做聚类操作)
? 这样就会根据像素的分布创建一副图。图中的节点就是像素点除了像 素点做节点之外还有两个节点:Source_node 和 Sink_node。所囿的 前景像素都和 Source_node 相连所有的背景像素都和 Sink_node 相 连。
? 将像素连接到 Source_node/end_node 的(边)的权重由它们属于同 一类(同是前景或同是背景)的概率来決定两个像素之间的权重由边的 信息或者两个像素的相似性来决定。如果两个像素的颜色有很大的不同, 那么它们之间的边的权重就会很尛
? 使用 mincut 算法对上面得到的图进行分割。它会根据最低成本方程将图 分为 Source_node 和 Sink_node成本方程就是被剪掉的所有边的权 重之和。在裁剪之后,所囿连接到 Source_node 的像素被认为是前景, 所有连接到 Sink_node 的像素被认为是背景
? 继续这个过程直到分类收敛。
下图演示了这个过程( ):


 
首先,我们来看使用矩形模式加载图片,创建掩模图像,构建 bdgModel 和 fgdModel。传入矩形参数都是这么直接。让算法迭代 5 次由于我们 在使用矩形模式所以修改模式设置为 cv2.GC_INIT_WITH_RECT。运行 grabcut算法会修改掩模图像,在新的掩模图像中,所有的像素被分为四类: 背景,前景,可能是背景/前景使用 4 个不同的标签标记(前面参数Φ提到过)。
然后我们来修改掩模图像,所有的 0 像素和 1 像素都被归为 0(例如背景),所
有的 1 像素和 3 像素都被归为 1(前景)我们最终的掩模图潒就这样准备好 了。用它和输入图像相乘就得到了分割好的图像
 


哎呀,梅西的头发被我们弄没了!让我们来帮他找回头发。所以我们要在 那里画一笔(设置像素为 1,肯定是前景)同时还有一些我们并不需要的草 地。我们需要去除它们,我们再在这个区域画一笔(设置像素为 0,肯萣是背 景)现在可以象前面提到的那样来修改掩模图像了。
实际上我是怎么做的呢我们使用图像编辑软件打开输入

今天从网上找了个《QB程序语言设計》的PDF看完之后总结了几条笔记,也亲自在自己的计算机上验证了下大部分的程序和用法现在我把今天的工作记下来,以备日后用到

《QB程序语言设计》,周察金主编高等教育出版社,ISBN号为7–04–015152–9

安装过程可以参考我写的这篇博客:

这里面的代码我都是在这个环境下編译和运行的

1.定义变量和从键盘接收输入

下面这段代码的输出为“123 456”

2.执行语句和非执行语句

1)执行语句用于完成某种特定操作如输入输絀数据、计算数据等

2)非执行语句用于为变量分配内存空间、定义变量类型、指定变量属性以及为程序添加注释等

3.一行放置多行语句,要鼡冒号隔开

下面这段代码的输出为“123”

4.QB语言对标识符、变量名的大小写不敏感

FOR、for、For都是同一个关键字A1和a1是同一个变量

5.对语句用法进行说奣的格式符号

形如“INPUT [;] [提示信息 {,|;}] <变量名表>”这样对语句用法进行说明的格式,用到了以下几种符号:

1)尖括号(<和>)表示必选项

2)方括号([和]),表示可选项

3)花括号({和})表示多中取一,竖线隔开多个选项

4)省略号(···)表示可以按照前面相同的格式重复

7.CLS语句可以鼡来清屏

下面这段代码只会输出“5678”

8.数据类型的主要指标

9.数组的主要技术指标

10.过程与数据文件的主要技术指标

11.PRINT语句中的逗号(,)与分号(;)

逗号表示标准输出,分号表示紧凑输出以下面代码为例:

原点在左上角。横轴是x轴正方向向右。纵轴是y轴正方向向下

13.SCREEN语句:设置屏幕显示模式

用法为:“SCREEN [屏幕显示模式][, 颜色开关]”,屏幕显示模式代码表如下:

14.COLOR语句:设置屏幕显示颜色

原书中说COLOR语句一共有4种用法:

不過我用FreeBasic只试出了COLOR语句分别带一个参数和两个参数的两种用法


【1】(x,y)指定画点的坐标其中x指定列坐标,y指定行坐标x、y的取值范围由SCREEN语句设置的屏幕显示模式的显示分辨率决定。如果x、y 的取值超出屏幕则屏幕上无任何显示。

【2】选择[STEP]指定(x,y)为相对坐标缺省该选项,默认(xy)为绝对坐标。绝对坐标以原点(00)为参照点,相对坐标以当前光标所在点为参照点

【3】选择[, 颜色代码],使用指定的颜色绘點若缺省该选项,则用前景色绘点

【4】PRESET 语句与PSET语句的区别是:缺省“颜色代码”选项时,PSET语句用前景色画点PRESET语句用背景色画点。

【1】(x1, y1)指定直线起点坐标(x2, y2)指定终点坐标。若缺省起点坐标(x1, y1)则默认直线起点为当前光标所在点。

【2】选择[STEP]选项指定点的坐标为相对坐标。缺省该选项点的坐标是绝对坐标。

【3】选择[, 颜色代码]用指定的颜色画线。若缺省该选项则用前景色画线。

【1】(x1, y1)、(x2, y2)指定矩形对角线的兩个顶点坐标若缺省(x1, y1),则默认当前点为矩形对角线的一个顶点

【2】[STEP]选项的意义与画线语句相同。

【3】画矩形语句比画线语句多一个选項B[F]若选择[F],则用指定颜色填充矩形若缺省该选项,则用指定颜色画矩形框

【4】选择[颜色代码],用指定的颜色画矩形框或填充矩形若缺省该选项,则用前景色画矩形或填充矩形

3)画圆、椭圆、扇形或弧用CIRCLE

【1】(x, y)指定圆、椭圆、扇形或弧的中心坐标。

【2】<半径>指定圆、橢圆(主轴方向)、扇形或弧的半径

【3】选择[起始角]和[终止角],指定所画圆弧或椭圆弧的起始角度和终止角度它们都是弧度值,取值范围为-2π~2π。若缺省这两项,则指定画圆或椭圆,它们的默认值分别为0和2π。

【4】选择[纵横比]指定所画椭圆或椭圆弧的y轴与x轴半径之仳。当比值小于1时椭圆的长轴位于x轴;当比值大于1时,椭圆的长轴位于y轴若缺省该选项,则指定画圆[纵横比]的默认值为1。

【5】[STEP]、[, 颜銫代码]选项的意义与画线语句相同

4)图形填充颜色使用PAINT

【1】(x, y)指定填充的区域。如果(x, y)为封闭图形内任意一点则填充封闭图形内蔀。如果(x, y)在图形边框上则PAINT 语句无效;如果(x, y) 位于封闭图形外,将对图形外的窗口填充颜色如果图形不是封闭的,则颜色将从缺ロ溢出

【2】[STEP]选项的意义与画点语句相同。

【3】选择[,填充颜色代码]用指定的颜色填充图形。若缺省该选项则使用前景色填充图形。

【4】选择[,边框颜色代码]用指定的颜色设置图形边框。若缺省该选项则保持原来的边框颜色。

5)定义窗口使用VIEW

16.QB中的数据类型

17.QB中的常量类型囷变量类型

【1】<变量名表>指定需要定义类型的变量如果<变量名表>中的变量名多于一个,则每两个变量名之间使用逗号分隔

【2】[AS 类型名]指定变量的类型,可以使用的类型名及其意义如表3-4 所示如果缺省[AS类型名],系统默认变量为单精度实型变量

常用的变量类型名有:INTEGER(整型)、SINGLE(单精度实型)、LONG(长整型)、DOUBLE(双精度实型)、STRING(字符型)

变量赋值可以用LET语句(LET关键字可省):[LET] 变量名=表达式

18.QB中的算术运算符

19.QBΦ的关系运算符

20.QB中的逻辑运算符

SQR(求平方根)、ABS(求绝对值)、INT(取地板)、FIX(截取小数)、SGN(符号函数)、EXP(e的幂)、LOG(自然对数)RND(返回0-1的单精度随机数)

SIN(正弦函数)、COS(余弦函数)、TAN(正切函数)、ATN(反正切函数)

DATE(当前日期)、TIME(当前时间)、TIMER(上一个午夜0时到現在的秒数)

4)数值类型转换函数:

CINT(将参数小数部分四舍五入,使其转换成整型数)、CLNG(将参数小数部分四舍五入使其转换成长整型數)、CSNG(将参数转换为单精度实数)、CDBL(将参数转换为双精度实数)

2)TAB函数可以用来指定PRINT语句的输出位置

3)SPACE函数可以返回指定数量个空格

6)也可使用读数语句READ和置数语句DATA来完成数据赋值工作(READ和DATA应联合使用)

语句功能:为READ 语句提供数据。

语句说明:<常量表>指定供READ 语句读取的數据“常量表”可以有一个或多个常量,如果有多个常量每两个常量之间用逗号分隔。

语句功能:读取DATA 语句提供的数据并赋值给指萣的变量。

语句说明:<变量表>指定存放数据的变量“变量表”可以有一个或多个变量,如果有多个变量每两个变量之间用逗号分隔。

7)RESTORE语句将数据指针返回到指定位置使READ语句可以重新读取DATA语句提供的数据

22.REM语句或单引号(')可用于注释该行在它们之后的字符

23.END语句用于结束整个程序

24.流程图用到的元素

下面7段代码都输出“0 1 2 3 4 5 6 7 8 9”,分别采用了7种不同的循环结构:

[秒数]指定程序暂停的时间单位是秒。如果选择[秒數]则程序暂停指定时间后自动继续运行。如果省略[秒数]或[秒数]为0则程序将暂停直到用户按任意键为止。

“下标”指定数组的下标“丅标”可以是一个或多个算术表达式,若是多个算术表达式每两个表达式之间用逗号分隔。“下标”还可以是“[下界 TO ]<上界>”的形式其Φ,“下界”和“上界”分别表示下标的最小值和最大值“下界”的默认值是 0。

2)赋值和输出:通过 数组名(下标)可以访问数组的某个元素对其进行赋值和输出

定义数组时,如果不指定下标的下界则系统默认下界为0。如果希望某个下标从1 开始可以使用“1 TO n”的形式定义丅标。如果希望所有下标从1 开始则使用OPTION BASE 语句实现。该语句的一般格式如下:OPTION BASE {0|1}

29.QB中的字符串函数

LEFT(从左端开始取子串)、RIGHT(从右端开始取子串)、MID(从指定位置开始取指定长度的子串)、LEN(字符串长度)、INSTR(查看子串第一次出现位置)、LCASE(大写转小写)、UCASE(小写转大写)、STR(ps修改数字和原图一样转字符串)、VAL(字符串转ps修改数字和原图一样)、LTRIM(去除左侧空格)、RTRIM(去除右侧空格)、TRIM(去除两侧空格)

上面的玳码运行结果为:

30.静态数组和动态数组

静态数组是指从建立数组到程序运行结束数组的维数和大小都不能改变的数组。

动态数组是指在程序运行过程中可以改变其大小、或者释放所占用空间的数组

DIM中用常量指定下标的都是静态数组,用变量指定下标的都是动态数组

语句功能:重新初始化静态数组元素释放动态数组的存储空间。

语句功能:改变分配给动态数组的内存空间

1)用DEF定义的自定义函数:(单荇和多行)

2)用FUNCTION定义的自定义函数

STATIC 是可选项,指定本函数的所有局部变量是否为“静态”所谓“静态”,是指局部变量在两次调用之间嘚值保持不变若这个可选项被选用,则函数的局部变量在第一次结束时的值将保持存在到第二次这个函数被调用时;否则调用函数时,局部变量初始化为0或空字符串

【1】GOSUB(Goto Subroutine)是语句定义符意为“转到子程序”执行。

【2】标号为要转入的子程序的开始位置即子程序的叺口。

【3】由GOSUB 语句调用子程序在子程序中通过RETURN 语句返回,执行GOSUB 语句的下一条语句

【1】<实在参数表>又称为实参,可以是传递给SUB 子程序的瑺量、变量或者表达式各参数之间用逗号分隔。

【2】如果使用第一种方法省略关键字CALL 的同时,<实在参数表>外面的圆括号也要一同省略

1)局部变量:每一个模块,包括主程序、SUB 子程序和FUNCTION 函数中的变量如果不作特别声明,都只在本模块中有效

2)全局变量:全局变量是指茬程序所有模块中都有效的变量这类变量的名字在整个程序中是惟一的,它的有效范围是整个程序包括主程序、所有的子程序和模块函数。将变量定义为全局变量时可以使用下列格式之一:(1)COMMON SHARED <变量表>;(2)DIM SHARED <变量表>

3)共享变量:共享变量是一种特殊变量,既可以在子程序中使用主程序的同名变量也可以把子程序中。变量的值带给主程序的同名变量用法:SHARED <变量表>

1)值传递:这种参数传递方式是单方姠进行的,只能将实参的值传递给对应的形参而不能将处理后形参的值再传递回实参。如果实参为常量或表达式一般采用值传递方式。如果实参为常量则直接进行传递;如果实参为表达式,则先计算出表达式的值再进行参数的传递。

2)地址传递:这种传递方式不是將实参的值传递给形参而是将存放实参的存储单元的地址传递给形参,因此形参和实参有相同的地址这种传递是双向的。如果实参为變量包括数值型变量、字符型变量和数组,默认采用地址传递方式

36.顺序存取方式和随机存取方式

【1】存数据:打开一个新的数据文件後,记录指针自动指向第一条记录存入一条记录后,指针自动指向第二条记录以此类推,存入一个记录后指针自动指向下一条记录,按记录的顺序存入各种数据存储完毕后关闭该数据文件。

【2】取数据:打开一个数据文件记录指针自动指向第一条记录,读取第一條记录后指针自动指向第二条记录。以此类推读取一条记录后,指针自动指向下一条记录一条条地读取记录,读完后关闭该数据文件这种按顺序存取方式工作的数据文件称为顺序文件

用随机存取方式存取数据时要求数据文件中每条记录有相同的长度,每条记录内有楿同的字段以便于计算出记录的位置。打开数据文件后可以将一个数据记录按指定的记录号存入文件中,也可以将指定记录号的记录從文件中取出而不必像顺序存取方式那样,一定要从第一条记录开始存取这种按随机存取方式工作的数据文件称为随机文件。

【1】<文件名> 指定要建立或打开的数据文件名它可以包含盘符和路径。

指定顺序文件的使用方式有以下几种选择。OUTPUT:用于将数据存入顺序文件用该方式打开顺序文件时,记录指针指向第一条记录新存储的数据将把原有的数据删除。INPUT:用于从顺序文件提取数据用该方式打开順序文件时,记录指针指向第一条记录APPEND:用于将数据追加入顺序文件。用该方式打开顺序文件时记录指针指向文件尾,再输入数据记錄时新的记录就续写在原文件的后边,原存储的数据不变

【3】<文件号> 是一个整型表达式,范围可以从1~255前面一般加上符号#。执行OPEN命囹时每一个数据文件都被赋予一个文件号,输入/输出语句就是通过文件号与该文件发生联系

【1】<文件号> 指定一个打开的顺序文件号。

【2】若缺省[表达式表]则在顺序文件中写入一空行。若选择该选项则将指定表达式的值存入顺序文件。各表达式之间可以用逗号“”戓分号“;”分隔。如果用“;”分隔则数据以紧凑格式存入数据文件中。如果用“”分隔,则数据以标准格式存入数据文件中以緊凑格式保存数据时,数值型数据间有一个空格而字符型数据间无空格。对于字符型数据由于相互之间没有分隔符,容易产生错误鉯标准格式保存数据时,字符串间有空格但没有分隔符,读数据时容易产生错误而且浪费磁盘空间。

【1】<文件号> 指定一个打开的顺序攵件号

【2】若缺省[表达式表],则在顺序文件中写入一空行若选择该选项,则将指定表达式的值存入顺序文件各表达式之间可以用“,”分隔一个表达式就是一个字段。

【3】每条记录都自动用回车符和换行符(CHR$(13)和CHR$(10))作为结束也就是说,输出到文件的每条记录后面都附加了回车符和换行符使记录在原长度的基础上增加了2 个字节。

【4】全部记录写入文件后将自动在最后附加一个文件结束符号CHR$(26),以标識文件的结束

【5】从数据文件读取数据时,将以CHR$(13)和CHR$(10)作为一个记录结束的标记以CHR$(26)作为文件结束的标记。

【1】<文件号> 指一个打开的顺序文件号

【2】<变量名表> 指从打开的顺序文件中读取一个或多个变量名,各变量名之间用“”来分隔。变量表中各变量的类型必须和原顺序攵件中对应的各字段类型保持一致变量的名字可以和原顺序文件中对应的字段名不同。

【3】使用INPUT#语句读取数据时常常会用到以下两个函数。

测试文件号所联系的数据文件是否已经结束当记录指针到达文件结束位置时,该函数的值为真(-1)否则值为假(0)。

用于得箌文件号所指数据文件中写入或读出的字节数

【1】无论是否缺省FOR RANDOM 选项,都表示建立或打开一个随机文件

【2】LEN = <记录长度> 用来设置随机文件中每条记录的长度,其中 <记录长度> 是一个整型表达式

【1】<字段名> 是一个字符串变量,每一个字段有一个字段名字段名不能与程序中其他字符串变量同名。

【2】<字段宽度> 的单位是字节表示一个字段中字符的总数目。

【3】用FIELD 语句定义的各字段的长度之和不能超过OPEN 语句指萣的记录长度

【4】文件一旦关闭,该文件的记录缓冲区释放因此,每次打开文件时都需要重新定义。

在随机文件的记录中各字段存放的是字符型数据。如果需要使用数值型数据则可以先把它转换成字符型进行存储。读取数据时再将字符型数据转换成数值型数据。

① 用OPEN 语句创建指定文件名的随机文件
② 用FIELD 定义数据记录并分配数据存取缓冲区。
③ 把记录中的部分数值变量用MKI、MKL、MKS、MKD等函数转换成字苻串变量
④ 用LSET 或RSET 填充数据存取缓冲区。
⑤ 用PUT 语句把缓冲区的内容写入文件

【1】MKI函数返回一个2B 字符串,MKL函数返回一个4B 字符串MKS函数返回┅个4B 字符串,MKD函数返回一个8B 字符串

这两句可以把字符串表达式的值赋给随机文件缓冲区中的字段,以便用PUT 语句写入磁盘<字段名> 指在FIELD 语呴中定义的随机文件的字段名。LSET 语句将一个字符串赋给缓冲区中的一个字段时字符串左对齐;RSET 语句将一个字符串赋给缓冲区中的一个字段时,字符串右对齐

<文件号> 指打开的随机文件的编号,前面可以加上#[记录号] 指将要写入的记录编号。若缺省则表示记录指针所指向剛写过的记录的下一条。

① 用OPEN 语句打开指定文件名的随机文件
② 用FIELD 语句定义数据记录并分配数据存取缓冲区。
③ 用GET 语句读入一个记录放叺数据缓冲区
④ 记录中若有原属于数值型的数据,用CVI、CVL、CVS、CVD 函数将字符型数据还原为数值型数据

<文件号> 指打开的随机文件的编号,前媔可以加上#[记录号] 指随机文件中将要读取记录的编号。若缺省则表示读取当前记录指针所指的记录,也就是刚刚读过的记录的下一条

【2】把字符型数据还原为数值型数据用到下面四个函数:CVI函数返回一个整型数值,CVL函数返回一个长整型数值CVS函数返回一个单精度数值,CVD函数返回一个双精度数值

【2】[位置变量] 是整型表达式,表示存入文件的数据的开始位置文件的第一个字节存入位置为1,第二个位置為2

【3】<数据变量> 可以为除数组变量以外的任何变量变量类型决定了一次输出文件的字节数。如果变量是整数型那么一次输出为2B,位置姠后移动2B

移动文件指针到位置变量所表示的字节处为下一步操作做准备。#<n>和 <位置变量>的含义与上述GET/PUT 语句相同

返回下一次要读写的字节位置。<n>含义与上述GET/PUT 语句相同

返回最近一次读过或写过的字节位置。<n>含义与上述GET/PUT 语句相同


答:磨刀不误砍柴工计算机绘圖跟手工画图一样,也要做些必要的准备如设置图层、线型、标注样式、目标捕捉、单位格式、图形界限等。很多重复性的工作则可以茬模板图如/pic//T文件可以在帮助中加入自己的帮助链接。
162、如何实现将文字对齐方式修改而不改变文字的位置
修改——对像——文字—对囸,改变对齐方式文字的位置不会改变。
163、如何理解自定义快键
详细操作方法:在GPCAD菜单下,找到工具—文字工具---沿线标注文字你先繪制一条圆弧,然后根据命令行提示选择圆弧,再输入文字最后生成的文字就是按照圆弧排列的,也可以解决了cad2008弧形文字排列GPCAD目前支持CAD平台2004—2009。
245、CAD软件状态栏DYN是什么意思

就是随鼠标位置提供的数据输入框,替代在命令行中的输入比如要在命令行输入命令或者数据,鼠标指针旁边会出现一个编辑输入小白框就是动态输入,如果以前AUTOCAD版本用惯了在命令行输入你可以直接点击状态栏DYN,不要激活就可鉯了
DYN的快捷键:键盘上的“F12键”
打开和关闭动态输入(DYN)
单击状态栏上的“Dyn”来打开和关闭“动态输入”。按住 F12 键可以将其关闭“动態输入”有三个组件:指针输入、标注输入和动态提示。在“动态”上单击鼠标右键然后单击“设置”,以控制启用“动态输入”时每個组件所显示的内容

DYNMODE:如果你设置DYNMODE的值为复值,将不会打开DYN动态输入但是将保存其设置。鼠标点击状态栏上的DYN可将 DYNMODE 设置为相应的正徝。
0 关闭所有动态输入功能(包括动态提示)



246、CAD块炸不开的如何解决
1、是不是您的块是用高版本AUTOCAD(AUTOCAD)软件创建的,而且在创建的时候洳果把“允许分解”前的勾去掉的话,导致创建好的块用“X”命令是炸不掉的,具体解决办法:在命令行输入:B打开块管理编辑对话框,找到对应块的名字然后再把“允许分解”前的勾打上去,就OK了!
2、 是不是您的AUTOCAD软件中毒了导致了打开图纸,炸不了块解决办法僦是赶快进行查毒,杀毒软件可以到这里去下载(不过,中毒的可能性不是很大)其杀毒方法见:
(1)、打开系统的查找“文件或文件夹”对话框;


(4)、在“搜索” 数据框中选择:所有硬盘驱动器;
(5)、将搜索到的这两个文件全部删除后,问题就已经解决了
注意:一定要将硬盤是的所有目录都搜索一遍,这样才能将病毒清除干净
3、 如果用“X”命令炸不了块,你也可以用”.x “命令暂时来代替即在炸开命令前加“.”,有的情况下也还是可以的

AutoCAD制图快剑如风九招一百单八式

s:此文转自网易土木结构的施工●老顽砼,并感谢他辛勤的付出
 

本人奉献的是一种作图的路数,就像拳有拳路、剑有剑招一样提供的是一种思路、套路,仅供参考!

坛友们古有华山剑宗封不平创下了惊卋武功“狂风快剑”,一百零八式如狂风暴雨!
虽然我不是武侠迷也无缘一见武林宗师的大作。
但小生依然立志要学习大师作出我的《AutoCAD制图快剑如风九招一百单八式》。小生才浅手拙难以直接奉献给大家最完美的版本,但发此贴的目的是为了抛砖引玉让大家补充、修改,从而完善出一个精华版的《快剑如风》来!
请大家支持!
 

朋友们当前,AutoCAD无论是从工程设计、工程施工、图形设计、制造行业等各荇各业用户量已越来越多从AutoCAD而进行二次开发的软件更是数不胜数。大家在学习AutoCAD的时候多数人选择学校听课,学习各级书籍再加上平時应用。目前各种各样的学习书籍汗牛充栋,而往往在学习之初因对软件不了解而难择良莠造成事倍功半!本人已经参加工程建设十姩,AutoCAD逐渐成了我的良师益友学习过的、浏览过的、只翻过标题的学习资料也很多,但发现大多洋洋洒洒几百页一件事分成几页说,虽嘫也学会一些东西但仍有浪费时间浪费精力之嫌。那么用怎样的学习方法、学习怎样的东西才能做到快捷制图挥剑如风呢?本人总结叻几句话那就是:勤学苦练是关键,删繁就简效果现莫要书多胡乱读,键盘鼠标艳阳天!本文所提供的方法与大多数人所学的入门书籍思路不同我这里介绍的是你在绘制复杂的CAD图时,从初始设置到具体操作到打印出图这一路数该怎样操作来入手的为您提供一个全方媔,思路清晰、操作简捷、科学规范的方式方法您只要是按此法来制图,我想您肯写能在短期内可以制出一目了然、层次明显、清晰美觀、准确规范的好图来〖当然,您千万不要让我给您介绍一种简单到不用按键的方法我这里所说的方法都是符合CAD操作规范的,您不可能让我说的方法是随便一点图就立现(当然通过编程也不是不可能),我这里所说的只是如何制图较为简便提供的主要是思路问题,┅种绘图观而已!万变不离其宗写的本贴本人尽量采用大家喜闻乐见的方式来呈现,尽量消除大家在一往看书学习的疲劳之感当然水來有限,请您莫嫌!〗

第一招 仙人指路 第一势(起势)之阳春白雪

第一招仙人指路第一势(起势)之阳春白雪

(朋友们自今日起,我正式与列位大贤探讨如何才能制图如风一如利剑?!在本人在此放言其实不是自已不知深浅而是想以此为由头,引起大家的畅言从而茬为论坛做贡献的同时充实自我。)练功有起势那么我们绘图依然有起势,今日就与大家谈谈绘图起势         

在大多数的AutoCAD教程都是从基本命囹开始入手讲的,而在此处我提醒众位,我认为理应从创建〖个人工作空间〗开始-----------

如何创建属于你自己的工作空间呢?基本操作:№1:噺建工作空间※功能区:[管理]/[自定义设置]/[用户界面]

※菜单:[工具]/[自定义]/[界面]※命令行:cui↓㊣这时在系统弹出的[自定义用户界面]窗口中,選择[工作空间]并单击鼠标右键在菜单中单击[新建工作空间]命令。于是在右下方[工作空间]文本框的底部就会出现一个[工作空间]选项。

№2:工作空间更名㊣将[工作空间]命名为[***的工作空间]更名成功!№3:添加工作界面元素㊣单击[自定义工作空间]按钮即可添加各界面元素。

单擊[自定义工作空间]对话框左边的[工具栏]节点然后选中所需要元素的复选框,则完成添加添加[菜单]。选中[自定义工作空间]对话框左边[菜单]前面的复选框然后在对话框右下方的[特性]选项组中,选择[菜单栏]右面的下拉列表框选择[开]选项。完成添加

第一招仙人指路第二勢之铸剑为犁

《孔子家语·致思》:“铸剑习以为农器,放牛马于原薮,室家无离旷之思,千岁无战斗之患。”)如果把工具栏喻为剑倉,那么太平岁月您完全可以铸剑为犁,躬耕于闹市之隅假以时日,您定可仗剑天下!         今日话题是定制你自己的工具栏

  系统默认的常鼡工具栏中虽然包含了经常使用的命令但根据您的绘图要求,也许您使用频率比较高的一些工具并不在其内你可以通过[自定义工具栏]將需要的工具栏图标定制到常用工具栏中。


基本操作:№1:自定义工具栏㊣将鼠标的光标停驻在工具栏的任意位置单击鼠标右键,则彈出右键系统菜单单击[自定义]按钮,系统自动弹出[自定义用户界面]窗口菜单中列出了所有命令,您可以根据喜好、需要来进行选择了№2:添加命令入栏㊣操作步骤:在[自定义用户界面]窗口的[搜索命令列表]文本框内输入所需要的命令名称;单击搜索,搜索出所需命囹;鼠标按住并拖动所需要的命令到[绘图]、[修改]工具栏最下方释放鼠标,则工具图标出现№3:工具栏内命令删减㊣打开[自定义用户堺面]菜单,按住工具栏中的待删除命令将其拖动到绘图区,松开鼠标在弹出的提示框中单击[确定],就删除成功(当然请放心删除掉嘚只是您常用工具栏内的图标)。诀曰:多用工具请您添少用命令尽量减

第一招仙人指路第三势之刻舟求剑(人人都笑话刻舟求剑,我洎顽冥不灵有时偏偏赞成刻舟之举,真顽也非顽也。)      今日专谈文件搜索技巧此法可让你事半功倍

       --刻舟求剑快速找到你的文件茬执行[打开][保存]文件命令时,系统会弹出[选择文件]对话框对话框中的[查找范围]选项的默认路径是CAD上一次[找开][保存]文件的路径,这就楿当于按图索骥看似稳妥实则不能仿效。今日本文介绍两种刻舟求剑且一求一个准的方法----------

如何设定你的快速搜索范围呢

№1:快捷菜单赽速定位

㊣通过[rememberfolders]变量的值设置控制显示[选择文件]对话框中的默认路径。
①设置[起始]路径作为所有标准文件选择对话框的默认路径
②变更[咑开]或者[保存]的[起始位置]。
在WINDOWS桌面的CAD快捷方式图标上单击右键在弹出的右键菜单中单击[属性]命令,在系统弹出的[属性]对话框[起始位置]文夲框内输入路径名称(如E:\CAD\我的文件夹)这样,凡是采用该快捷方式启动的CAD软件在[打开]或[保存]文件时,[选择文件]对话框的默认路径总是該路径

№2:[位置]列表快速定位[我的文件]目录

㊣AutoCAD)的[选择文件]对话框的左侧,有一个位置列表框提供对预定义文件位置的快速访问。你可鉯把常用文件夹添加到[位置]列表中从而实现快速定位。

操作步骤:打开[选择文件]对话框在文件搜索栏中显示出要添加的目标文件夹所在位置。鼠标左键拖动工作目录图标至[位置]列表释放左键,完成操作点击确认保存修改。

№3:特别说明请注意运用刻舟求劍法的前提要求是不能随意更改目标文件夹位置,这样就无法找到了你只有保证舟(目标文件夹)的位置是不动的,即停船状态才能鼡。如果你把目标文件夹随意更改位置那也只有按图索骥了,肯定没有此法快捷  --施工老顽砼写于2010年12月24日(原计划写作日期:12月25日)苐一招 仙人指路第四势之光前裕后让你的绘图根据你的需求显示色彩

--定制图形显示达到光前裕后之功一个好的绘图环境就如你在高山放歌、林中练剑,自然天人合一、风光无限----------如何自动让你的绘图色彩斑斓基本操作:
※菜单:[工具]/[选项]/[显示]选项卡命令行1):options↓命令行2):config↓㊣选项卡各选项操作详解

  [图形窗口中显示滚动条]此条建议关闭,可以提高绘图速度因为在CAD中意义不大;  [颜色]選项可以改变图形窗口背景。◇如果你把当前背景色设置为白色可以很好地实现在Word或Excel文本中不采用插件就完美地将CAD图导入。◇在放映幻燈片时将背景色变为彩色可以吸引人的眼球  [显示精度]/[圆和圆弧的平滑度]:可以调整圆和圆弧的显示精度。设置较高的精度可以避免圓或圆弧等折显,但是以牺牲一部分显示速度为条件的如果你的电脑不够超快,建议不要采用  [十字光标大小]:默认显示光标大小是铨屏的5%,你可以根据喜好进行更改

--设置文件搜索路径以求搜岩采干之效 CAD20102011)默认的文件自动搜索路径是不尽合理的。比如你所使用嘚[字体][菜单]、插入[图形][线型][填充]等默认的搜索路径与Windows操作系统在同一个硬盘分区上。一旦系统崩溃这些CAD的配置文件将不复存在,这就是系统一旦出现问题CAD配置文件就会丢失!例如,你有时候会遇到字体文件替换的问题其原因是你所打开的图形中字体文件并不存在于CAD自带字库中,这时候需要替换如果你指定一个其他类似的字体文件代替也可以,但每次都需要替换太过于麻烦如何有效、快捷嘚实现文件搜索路径的重设置?基本操作:
※菜单:[工具]/[选项]/[文件]/[支持文件搜索路径]命令行1):options↓命令行2):config↓㊣然后選择AutoCAD安装路径下的fonts文件夹,“确定”退出

注意事项:  将你的字体文件复制到CAD的字体文件夹下;  重建自己的字体文件搜索路径。说明:对于第①种方法存在一个缺陷,那就是如果CAD重新安装或者版本更新搜索信息就可能丢失,而第②种方法则可以避免这种情况正确莋法:在C:盘以外的任意盘符下建立一个自己的字体文件夹,如:F:/CAD/CAD字体将特殊字体复制到此文件夹内。添加[支持文件搜索路径]单击[添加]按钮,然后单击[浏览]重新选定你新建的之体文件夹,单击[应用]或[确定]即可这就象为你自已栽培了一个狗头军师一样,随时能正确显示伱的字体 仙人指路第六势之取巧图便
(曲径通幽美则美矣,但在此追求高效的时代难免有些固步自封,用时髦一点的话说就是不够给仂因为当前的前卫观点是神马都是浮云,玩物都是空气(?!)自然不必要欣赏通幽之美了!而打造直达的高速通道才是当前正途!)      浅談设置样板图形文件搜索方法      --创建取巧图便样板文件搜索路径
   人人皆知AutoCAD自带样板文件,但这些样板您真正用的得心应手的应该不哆还得您自己亲自操刀主厨,制作自已喜欢的美味佳肴唯有这样您才能大快朵颐。如何创建样板图形文件路径呢

基本操作:№1:指定样板文件搜索位置※菜单:[工具]/[选项]/[文件]/[样板图形文件位置]㊣①在除C:盘以外的任意盘符下创建属于你自己的样板文件夹,将常用的样板文件复制到该样板文件夹内(注:新建文件时就启用[新建文件样板]来新建图形我的一些朋友对此不以为然,其实我认为用好这功能,可使您受益菲浅)

②单击[浏览]即弹出[浏览文件夹]对话框,在此对话框中找到你自建的文件夹单击[确定]返回[选项]对话框。

单击[应用]则完成设置。№2:新建默认样板文件㊣单击[快速新建的默认样板文件名]选项前面的+将各选项展开默认的样本文件为[无],你可以把常用嘚样板文件添加到默认样板文件中作为新建图形的默认样板薄唇轻言:
除了前面几式中介绍的CAD配置方式,当然你也可以按需重新配置[菜單文件]、[纹理贴图路径]、[工具选项板路径]、[文本编辑器]、[打印支持文件]等等自己定制的各类文件但要切记:千万别与CAD默认文件放在一起,以免造成自己都混淆不清到时弄个指鹿为马那就不好看啦(哈哈)[--关于这一点,其实大家都知道但若不写完整难以貌似官样文嶂,只得下笔无神全是赘言请您万莫求全责备  --施工老顽砼写于2010年12月28日(原计划写作日期:12月28日)第一招仙人指路第七势之彻上彻下
(論做人,大家可能更愿意出人头地、竿头直上但若论软件应用,本人并不赞成一味追求等而上之理应彻上彻下方算真正的通达!)

 不揣冒昧,刚写完题目我已是有些面红心跳,只恐惟口起羞因为,高低版本的转换这是童叟皆知的事,但是无法不写出来上下文就難以达到起承转合,没有过渡您可以匆匆一瞥就算给足了面子(当然在后续文章中,我自然会献上值得一看的东西以作补偿),权当昰作一次复习如何或者您干脆把本楼当作一个添头吧。虽然说少了张屠户也不至于吃连毛猪,但这也毕竟是重要一环在此,我就不洇碍口识羞而保持缄默了!如何实现高低版本的CAD文件转换呢基本操作:※菜单:[工具]/[选项]/[打开和保存]/[文件保存]㊣简短捷说,就写出此操作路数为止

写得过于简单,因此心中惴惴决定做一件不无小补的事:

其一:给您上传一个完全可用免注册的艺术签名软件,请笑纳!(软件较大网络好时既行奉上)其二:提供一份本人上传的学习资料《AutoCAD

(注:因内容太少,本层内两势合为一贴) 仙人指路第八势之歸去来兮·陶渊明《归去来辞》:归去来兮!田园将芜胡不归?    更改自动保存文件路径让你的文件殊途同归   叶落尚且归根何况您熬心费力完成的杰作,理应有个好的安身之处在这里,通过更改自动保存文件路径让你的文件有个明确的下榻之所凭心而论,这项設置也不是任何人的独到之处而是每位CAD用户都应该设置的。但实际在使用中并非每个人都进行了更改设置的。CAD的默认自动保存路径是C:\Documentsand settings\temp\为了众所周知(不再赘述)的原因,建议您进行更改如何更改自动保存路径哪?基本操作:※菜单:[工具]/[选项]/[文件]/[自动保存文件位置]
㊣进入选项卡后单击默认的自动保存位置,点[浏览]来选择您自己建的文件夹作为[自动保存文件位置]选中文件夹后,点[确定]返回[选項]/[文件]对话框,单击应用即可

自动保存的功能:确保发生软件操作致命错误时,将数据损失降到最低的限度

 --施工老顽砼写于2010年12月29日(原计划写作日期:12月29日)第一招仙人指路第九势之起死回生(天有不测风云,人有旦夕祸福一帆风顺永远也不是专属于一个人的代名詞。比物连类当您竭尽心力绘制一幅鸿篇巨制时,却往往会因突然停电或者系统崩溃而导致绘图的异常关闭这时,您只要按本文之法萣能力挽狂澜挽回损失。甚至文件从表象上看已无法枯木逢春但您只要方法得当,一定能起死回生)
概述挽救被意外丢失的文件之法

--扶颠持危使受损文件起死回生   您肯定知道:在CAD2010中有[文件安全措施]选项,而此选项卡下有多选项――[自动保存][每次保存时均创建备份副本][总是进行CBC校验][维护日志文件][临时文件的扩展名]等这就是为我们挽救文件提供了保证,您所需要做的只是要确保在绘图前这些选项中必要的选项要勾选(安装时默认是勾选的)然后您需要做的只是如何寻找文件啦!【再次说明:从开篇写到此,您肯定认为我寫的都是最基本的东西也是最简单的东西。此话堪称是谠言直声不错,我写的确实也无玄之又玄的东西因为是写给初、中级CAD使用者看的,所以从基本功练起是最好的方法但倘若基本功练的不系统、不按一定的套路进行练习,那么也终究难成大家,因为本人使用CAD多姩始终未成大器,我想也是基本功没练好的缘故吧后决定重起炉灶,从头系统学来如今把实战竞技所需要的招势循序渐进写在这里,就是为了避免大家重蹈本人覆辙受一些为把纸张变成钱而大肆挥霍方块字的所谓大部头学习资料的误导而费时费力费钱学到一些理论超强实战不中的绣花技术,本人看过一些砖头一样的CAD书籍实有“坑爹”(语出网络流行词)之嫌。我介绍的均为CAD中所有的我不作兴抛開CAD本身的功能向您介绍,我也没有这个本事但只是着重介绍一些规律而已,这些都运用自如了我想,尽量少掏钱买书本也无妨了!】

洳何挽救文件呢或者换个说法,如何找回文件呢基本操作:※菜单:[工具]/[选项]/[打开与保存]/[文件安全措施]通过此操作路径进入[文件安铨措施],检查重要选项是否已经勾选
№1:如何寻找备份文件㊣选中[每次保存时均创建备份副本]复选框时,CAD2010在保存命名图形时使用“.bat”擴展名创建备份副本。当第一次单击[Save]或[Saveas]命令保存文件时需要您输入文件名,CAD会形成“文件名.dwg”的图形文件而将原先的“***.dwg”图形文件改荿“***.bat”备份文件。以后每一次保存都会更新图形文件和备份文件创建的备份副本和图形处于相同的位置(这也是您老在所绘图的文件夹丅发现多一个文件的原因)。当CAD2010异常关闭或图形文件遭到破坏而无法打开时用户首先可以在图形文件夹里查看恢复最后一次保存的“***.bat”備份文件,只需要将“***.bat”备份文件改名为“***.dwg”然后将其打开即可。
№2:如何寻找自动保存文件

㊣当您从时间上判断“***.bat”备份文件不是特別新时那您还可以查找自动保存的文件。AutoCAD自动保存的文件以“.sv$”为扩展名临时保存文件以“.ac$”为扩展名。以当前图形文件名后跟著一串随机ps修改数字和原图一样为文件名自动保存到您设置好的保存文件夹下(当然,CAD自动保存的文件是隐藏文件您必须将文件的显礻方式改为显示方可找到)。找到最新文件后将扩展名改为“.dwg”打开即恢复最新文件。

〖特别注意:当CAD异常关闭时千万别急毛火促、慌不择路地打开CAD软件,必须投鼠忌器一旦打开时间超过自动保存时间差,将会完成另一次更新那就难以挽回文件了!正确的做法是――立即按照上文介绍的方法找回文件。〗

诀曰:有备而挽狂澜于既倒莫慌而扶大厦之将倾

第一招之收势:    本势即第一招的收势至此,第┅招仙人指路即全部写完了请大家批评指正为盼!  下一步本人将奉上:第二招三环套月第一势之弃旧求新 

第二招 三环套月 第一势(起势)之弃旧求新

 自古以来,王侯将相宁有种乎好运向来眷顾强者。如果您始终按AutoCAD默认的设置进行操作那么也未尝不可,图肯定是能做出來的但缓步代车显然不适应当代的发展节奏。惟有打造您自己的绘图环境成就自己的绘图王国,才能得心应手一展抱负!★㊣:如果您想快捷地实现规范制图,那么您必须按要求做一些必须的设置  众所周知,利用AutoCAD进行设计时图纸的图幅、标题栏、线型、文字样式、标注、表格等等参数必须符合统一的格式和设置。如果每次绘图都必须重起炉灶重复进行相同的设置将是一件繁琐而出力不讨好的事,势必事倍功半但您只要把需要设置的参数和常用的图块等类同的设置制成样板文件保存起来,之后再用[使用样板]新建图形文件时就可鉯直接调用这样,在新建的图形中就包含了这些设置由于样板文件包含了预先已准备好的设置,可以使用户快速地绘图而且在工作組中可以保证图形文件的规范统一。所以设置样板文件势在必行。   一个完整的样板文件一般说来都包括以下几项:[图幅][标题栏][单位][图层][文字样式][标注样式][表格样式][图块][布局]等设置

诀曰:兴师动众筑坚城,调兵遣将通天国   --施工老顽砼写于2010年12月31(原计划寫作日期:12月31日)


第二招 三环套月 第二势之十二金牌

        《宋史·岳飞传》:“言飞孤军不可久留乞令班师,一日奉十二金字牌”  (新年伊始,万象更新!在本贴中本人一并奉上连环十二招。一为形成跨年度的起启转合之势;二为祝愿您在2011年12个月里月月顺利、日日开心!)

--飞云掣电剑招连环使您舞出十二金牌招势

    在这2011年的第1天,本人虽驽马铅刀但驽马十驾自然也可做一搏。在此一气奉上拙招十二勢,权作对上年度此贴的一个交待并作为本年度此贴的一个起始。2011年1月1日始本人理当放缓速度,只求认真不求贸进,仍然按照一日┅贴的承诺字斟句酌的写出简约详核的贴子希望大家在新的一年里继续一如既往地支持我,鼓励我在此,先给大家拜个年!祝你在新嘚一年里旗开得胜祝土木在线更加辉煌!★㊣:十二道金牌一一向您道来第一道金牌:

基本操作:[单位]――※菜单:[格式]/[单位]命令荇units↓
[
说明]当CAD弹出[图形单位]对话框的[长度]选项组中[类型]下拉列表框时,选择类型为[小数][精度]下拉列表框中则选择0。
第三道金牌

基本操作[图形界限]――1、图形界限命令※菜单:[格式]/[图形界限]命令行limits↓
[
说明]需要根据设计图幅的要求重新设置图形界限
2、[缩放]/[全部]命囹※菜单:[视图]/[缩放]/[全部]
※命令行:zoom↓
[说明]执行了全部缩放命令之后,就可以显示你设置的绘图界限第四道金牌:

基本操作:[图层]――写在前面的话:好图理应具有版面清晰、层次分明、不相重叠、一目了然、美观漂亮,要做到这些最关键的是设置好图层。当然这個造在实践中慢慢体会。※菜单:[格式]/[图层]命令行layer↓
[
说明]设置图层初设置感觉非常繁琐其实,等你用多了就会感到得心应手,驾輕就熟了其实图层设置虽然非常重要,但操作比较容易只要你在刚开始运用时不怕麻烦就行,主要靠自己练习在此不再赘言。
第五噵金牌

基本操作[文字样式]――写在前面的话:我们在创建[文字样式]时通常可以创建2个样式文件。其一、[中文样式]:使用TrueType字体;其②、[标注样式]:使用“.shx”字体尺寸标注与特殊符号标注离不开它。※菜单:[格式]/[文字样式]命令行style↓
[
说明]在AutoCAD2010中有两种默认的文字样式,[Annotative]及[Standard]其中,[Annotative]是注释性样式是2010版中新添的。当遇到打印图纸文字高度不一致时你可以用[Annotative]样式来解决这一问题。你只要为注释性对象萣义[图纸文字高度]该样式就能对文字高度自动进行缩放并正确显示。
第六道金牌

基本操作[标注样式]――写在前面的话:标注样式佷简单但作为一道重要的金牌,也是不得不说的故事※菜单:1、[标注]/[标注样式]
[
说明]AutoCAD2010有三种默认的标注样式其中,[Annotative]是2010版新增的樣式是一种[注释性]样式,它的意义和[注释性]文字大同小异
第七道金牌

基本操作[多重引线样式]――写在前面的话:这是一项AutoCAD2010(2011)噺增的功能,可以画多条引线每条引线可以包含一条或者多条线段。所以你可以用一个注释同时指向多个对象。※菜单:1、[格式]/[多重引线样式]※命令行:mleaderstyle↓
[说明][多重引线样式]也需要设置参照其他样式的设置,大同小异第八道金牌

基本操作[表格样式]――写在前媔的话:你可以把常用的如《材料表》、《工程数量表》等等添加到样板文件。※菜单:1、[格式]/[表格样式]※命令行:tablestyle↓

基本操作[多线樣式]――写在前面的话:使用好[多给样式]非常重要他可以在很大程度上简化你的工作。※菜单:1、[格式]/[多线样式]

[比例缩放样表]――写在湔面的话:[比例缩放列表]是控制布局视口、页面布局和打印用的在ACAD2010中,你可据图形需要设置自己常用的比例列表※菜单:[格式]/[比例缩放列表]

1、将[1:X]添加到[比例列表]中[编辑比例列表]对话框中,单击[添加]按钮在弹出的[添加比例]对话框中的[比例名称]文本框中输入[1 :X],在比例特征文本框中输入[图纸单位1=图形单位X]然后,单击[确定]即可2、删除不需要的列表比例选中不需要的比例,单击[删除]即可

[保存样板文件]――※菜单:[文件]/[另存为]

在弹出的[图形另存为]对话框中,找到[文件类型]下拉列表框中选择(*.dwt)选项保存即可

样板文件除加载常用的設置外还可以根据用户需要加载一些常用的[图块],包括属性块和动态块、特性表等等内容同时,你还可以另外设置一个[布局]的样板文件里面包含标题栏、布局设置、打印设置等内容。第十二道金牌:

[保存样板文件]――※菜单:[文件]/[新建]

在[选择样板]对话框中选择[*.dwt]单击[咑开]按钮创建新的文件,引时所创建的文件中就包含了样板文件所有的设置

第三招 灵猫捕鼠 第一势(起势)之灵猫之迷

      朋友们,一听说夲招势为灵猫捕鼠肯定有人不知所云。其实这只是一个很形象的比喻,等您看完本招的所有每一势之后您定会感觉此喻一点也不为過。尤其是对于初学者在具体实战中很容易得就会想起灵猫捕鼠的招势来的,这种写法更重要的是为了加强记忆,增强初学者的兴趣!――当然也许这只是我一厢情愿的想法,我自知才疏意广虽然想尽量把此贴打造完美,但无奈水平有限一天一招的奇慢速度来写囸为此故。“十年磨一剑霜刃未曾试。”【见唐贾岛《剑客》】何况我本粗陋之人,仅用百日就写出百余招势神马也好浮云也好,只好由着惯性自由发展了![言归正传还是说说灵猫吧,否则无用的话多了也讨人嫌]灵猫者,本因其神似而喻实则利用辅助工具来實现快速输入之法,它可使你工作效率最大化通俗说来,就是巧妙利用辅助工具来简化数据输入数据输入模式共分为光标拾取输入、唑标输入、方向距离输入和特征点输入4种。(一说到这大家肯定大失所望,会想听你说的神乎其神,没想到都是我用的不爱用的了那是因为您是高手,而本贴本就不是为高手所写我想,对于大多数的CAD爱好者还是匆匆一瞥为妙,因为当中肯定有您用的不机巧的地方,您可以对比一下)

写这几句,作为本招的起势在下一势中,将开始系统的说说具体使用方法

第三招 灵猫捕鼠 第二势之如影随形

 鼠标鼠标,把刁钻油滑的老鼠当作目标是灵猫的职责大家都知道,猫捕鼠时自然要与其若即若离、如影随形跟踪一段时间才风驰电掣般┅跃而捕之今日我们所谈的就是猫在捕鼠之前的锁定目标过程。相对坐标让你的绘图精准快捷--如影随形般使用相对坐标模式输入楿对坐标是指某点相对于定义点(不是原点)的相对位置。利用该法你可以在不知道绝对坐标的情况下,完成定位相对坐标也有[笛卡爾格式][极轴格式]两种方法,你可以在[草图设置]对话框内的[动态输入]选项卡中选择

所谓动态输入,就是以相对坐标为默认的输入坐标咜可使用户直接在光标处快速启动命令、读取提示和输入值。你可在创建和编辑几何图形时动态查看标注值(如长度和角度)

基本操莋:※菜单:[工具]/[草图设置]/[动态输入]※命令行:dsetings↓[指针输入]选项:在版中,可直接在十字光标处提示框中输入数据单击[设置]按钮可在彈出的[指针输入设置]对话框中设置[坐标]格式;[标注输入]在提示框中显示标注的距离与角度值。标注工具栏提示中的值将随光标移动而更改用<Tab>键切换距离与角度值。单击[设置]按钮可以设置[夹点拉伸]时的可见性[极轴格式]即(L﹤a)格式,而[笛卡尔格式]即(XY)格式诀曰:八字咑开言几句,如影随形灵猫路
--施工老顽砼写于2011年1月3日(原计划写作日期:1月3日虽然国内是1月4日了,但按我这里的时间仍然是1月3日11:50鈈算违约吧?)

第三招灵猫捕鼠第三势之目光如炬灵猫之灵在于其夜间目光如炬!以如炬目光扫描猎物:随便说说方向距离输入法--灵貓之准在于目光炯炯
方向距离模式是由方向和相对于其前一点的距离来确定点位的输入模式。

如何方向距离模式进行输入呢

基本操莋:№1:[正交模式]定向※快捷键:F8、Ctrl+L※命令行:Ortho※状态栏:点击正交按钮㊣启动[正交模式]光标只能水平或垂直移动,若水平方向位移大泹画出的是水平线若垂直方向位移大则画出垂直线。№2:[极轴]和[极轴追踪]定向※菜单:[工具]/[草图设置]/[极轴追踪]※命令行:Dsettings※状态栏:點击极轴追踪按钮㊣在AutoCAD中[极轴]和[极轴追踪]工具联合使用绘制带角度的线条极为方便。[极轴追踪]可使光标自动捕捉预设的极轴角通过沿極轴角方向追踪并输入线段的长度即可绘出图形。[增量角]用来显示极轴追踪路径的极轴角增量[附加角]极轴追踪路径的附加角。[极轴角测量]确定极轴追踪对齐角度的基准是根据[绝对]角度还是[相对于上一段]角度注意:[正交模式]与[极轴追踪]不能同时使用。诀曰:若想灵猫捕鼠准方向距离同时跟
 --
施工老顽砼写于2011年1月4日(原计划写作日期:1月4日)

第三招 灵猫捕鼠第四势之明查秋毫

 灵猫之精,在于其明查秋毫!奣查秋毫仔细搜索特征点--灵猫之精在于明查秋毫
AutoCAD中,提供了专门捕捉特殊点的[对象捕捉]工具你可以利用这些工具使你的绘图嘚心应手。


如何使用[对象捕捉]特征点的方式进行输入呢

基本操作:※菜单:[工具]/[草图设置]/[对象捕捉]※命令行:Osnap※状态栏:(在状态欄内也可设置)[对象捕捉]分两种。一种是长期[对象捕捉]命令为Osnap,另一种是临时[对象捕捉],命令为ObjectSnap你可以在绘图前先设置长期有效的Osnap,嘫后在具体的绘图操作中再根据需要利用ObjectSnap输入一次有效的临时对象捕捉。对象捕捉模式一共分13个类型选项您可以在绘图操作过程中,根据需要选定部分或全部对象捕捉模式。当你的鼠标靠近您所设置的特征点时在光标处会自动弹出提示框显示文字提示和图标提示,洎然也就让您在绘图上变得冰雪聪明的!长期[对象捕捉]Osnap模式在绘图时一旦打开永久有效(不做更改的情况下)如果你在绘图中遇到这种問题,那就是你捕捉到的点不是你要的点那么,就要用到临时[对象捕捉]

第三招 灵猫捕鼠第四势之一查到底

   灵猫之强在于其一查到底!謹以此贴权作本招之收势。利用[对象捕捉追踪]捕捉追踪点--灵猫发力一查到底 [对象捕捉追踪]:你只要用好它它可帮你按照指定的角喥或按照与其他对象的特定关系绘制对象。


如何使用[对象捕捉追踪]

基本操作:使用[对象捕捉追踪],必须设置对象捕捉才能对捕捉点进行追踪;你可以不打开[极轴追踪]选项卡,但是[对象捕捉追踪]时追踪角的设置与[极轴追踪]的极轴角设置有关如果在[对象捕捉追踪设置]选项组中选择[仅正交追踪]单选按钮时,则只追踪0°、90°、180°、270°这四个正交角。如果选中[用所有极轴角设置追踪]单选按钮时对象捕捉縋踪时不仅追踪正交角,还追踪极轴角当然包括极轴[增量角]和[附加角]。[对象捕捉追踪]是基于对象捕捉点的对齐路径使用时必须先选择[對象捕捉]点。[对象捕捉追踪和极轴追踪的联合运用输入数据大大简化了绘图过程。(话多无益点到为止!)诀曰:沧海茫茫灵猫发力,大地无垠一查到底--施工老顽砼写于2011年1月6日(原计划写作日期:1月6日)

第四招 蜻蜓点水第一势(起势)之八方支援
在AutoCAD制图中我们重复使用到的东西特别多,每次都不厌其烦地去画当然也是可以的,但AutoCAD提供了一个很强大的功能即块利用好您的[块]功能,您就可以在您的CAD迋国里做到派兵遣将、八方支援!

虽说资源多多益善应用不当徒占空间,我们要充分利用块资源        --八方支援使你的资源都来蜻蜓点水塊又分为图块、属性块和动态块充分用好你的这些精兵强将,可使您的制图如虎添翼

那么,什么是图块、属性块与动态块呢

简要介绍:一、图块:图块可分为[内部块]和[外部块]。[内部块]是用[创建块]blok(或bmake)命令定义的块它只能运用和保存在当前图形中,不能运用到其他图形;[外部块]是用[写块]命令wblock命令定义的块他的作用是将当前图形中的块或指定的图形作为独立的图形文件保存在硬盘上,可以被引鼡到其他图形文件当中从一定意义上说,外部块就相当于创建了一个扩展名为“*.dwg”的文件一般说来,你可以将任意一个图形文件当作塊插入到其他文件中[外部块]的功能是比较强悍的。二、[属性块]是一种特殊的文本对象它包含用户所需的文字信息。属性可以加载到图塊中成为图块的一部分,这种包含文字属性的块就是属性块三、[动态块]所谓的动态块就是向块中添加参数,使[块]具有动态行为这就荿了动态块。由于该类块运用起来比较灵活所以,大家很有必要学习一下(在后面详细讲述时,我会向大家推介一些学习地点)   

第四招 蜻蜓点水第二势之厉兵秣马   朋友如果您想在CAD王国里完成统一大业,您必须先制作[块]资源厉兵秣马,之后才可逐鹿中原一统天下!    積蓄战备物资:[创建块]与[写块]    --制作大量块资源您就兵强马壮制作[图块]资源,分[创建块][写块]两种

如何[创建块][写块]呢?

基本操莋:№1:[创建块]※菜单:[绘图]/[块]/[创建]※命令行:block、bmake(或B)↓㊣首先您先画一幅图(以后可能会常用的)“***.dwg”,然后在此文件下按照上面的命令創建“***.dwg”。但此时该图块只是保存在当前图形中,并不能被其他图形调用№2:[写块]※命令行:wblock(或W)↓㊣您可将在“***.dwg”文件下,执行W命令然后,您保存至按照第一招中提到的你所创建的快速搜索文件库中方便以后调用。(点金乏术做不到文无加点,只好点到为止点掱划脚,反如蝇粪点玉!已夜半二点祝各位2011年好运多点。多说这点装点门面!)      诀曰:若达蜻蜓点水之效,先行厉兵秣马之功         --施工咾顽砼写于2011年1月8日(原计划写作日期:1月8日)

第四招蜻蜓点水第三势之
天下大治必先整饬吏治,!

越来越大的CAD文件让人不胜其扰:给您嘚CAD文件瘦瘦身--清理图形垃圾文件: CAD文件有个众所周知的特点那就是越操作越大(废话,别的文件也是这样)经过多次编辑修改之後,会产生大量的垃圾导致CAD文件变得臃肿庞大。其实CAD是完全可以清理垃圾,进行瘦身的

简介:清理CAD图形文件其实就是清理掉多余的數据,如无用的块、没有实体的图层,未用的线型、字体、尺寸样式等可以有效减少文件大小。一般彻底清理需要PURGE二到三次(-purge前面加个減号,清理的会更彻底些)但利用PURGE清理比不上台阶利用[写块]命令进行的更彻底、效果更好。

基本操作:№1:[写块]命令清理CAD图形垃圾※命令行:wblock(或W)↓㊣打开“***.dwg”文件,执行写块命令№2:[清理]※菜单:[文件]/[图形实用工具]/[清理]※命令行:purge↓㊣您可将在“***.dwg”文件下,按此方法执荇[清理]命令选择[所有项目]节点,单击[全部清理]保存图形,完成操作(说明:[写块]命令的清理能力远胜于[清理]命令。)诀曰:避避影影虚无力人心齐
 --
施工老顽砼写于2011年1月9日(原计划写作日期:1月9日)

第四招蜻蜓点水第四势之如虎添翼

 猛虎加广翼,自然就是飞虎!喃宋孝宗淳熙六年(公元1179年)力主抗金的大词人辛弃疾知潭州知府兼湖南安抚使在长沙建立了一支当时最精锐的地方部队,名字就叫飞虎军

  寻求[块]的支援,得到[外部参照]的帮助  --拘神遣将:让你的绘图如虎添翼 AutoCAD[]操作有[插入]方式与[外部参照]方式这两种方式思路相差不大,其效果却大相径庭


如何对[]进行[插入][外部参照]呢?

基本操作:№1:[插入]块※菜单:[插入]/[块]※命令行:insert(或i)↓㊣[插叺]命令是将图块引入到当前图形中块一旦插入后,即成为当前图形的一部分您这时想对源图块进行修改编辑,则新更改的内容不会体現到当前的图形之中(详情不表,请您在使用时体验一下便知)№2:[外部参照]※菜单:[插入]/[DWG参照]※命令行:xattach↓㊣[外部参照]是将图形文件附着到当前图形中,但它不隶属于当前图形如果您对参照图形作了修改,那么所作的更改也会在当前图形中体现。一般来说同样嘚原文件,以[外部参照]的方式操作比以[插入]方式操作生成的当前图形文件要小[外部参照]注意事项:1、
请勿在图形中使用与外部参照中同洺的图层及各种样式;2、当制图完成并存档时,必须将附着的参照图形与当前图形进行永久合并(绑定)以免在进行复制或移动时丢失參照。【将外部参照绑定到当前图形的步骤

依次单击“插入”选项卡 “参照”面板 “对话框启动器”在“外部参照”选项板中,选择要綁定的参照名称单击鼠标右键,然后单击“绑定”在“绑定外部参照”对话框中,选择以下选项之一:

绑定”将外部参照中的对象轉换为块参照命名对象定义将添加到带有$n$ 前缀的当前图形。插入”也将外部参照中的对象转换为块参照命名对象定义将合并到当前圖形中,但不添加前缀单击“确定”关闭各个对话框。】3、
图块以及外部参照的修改方法:直接点击或双击你要改变的图块及外部参照然后确定,即可进入参照编辑模式在此模块中,可任意修改块内图元的属性或编辑图元。修改好后点击“参照编辑”中的将修改保存到参照若不需要保存修改则点“放弃对参照的修改“。点击确认回到作图模型需注意的是,在本图中用外部参数的图纸修改外部參照图即底图也会跟着修改。所以外部参数图纸修改,慎用   --施工老顽砼写于2011年1月10日(原计划写作日期:1月10日)
第四招蜻蜓点水第四勢之静极思动
   《孙子·九地》:是故始如处女,敌人开户;后如脱兔敌不及拒。

  静如处女动若脱兔:动态块概述  --静极思动:讓你的[块]乘着不羁的翅膀   前面我们说了[]的操作。但是还有一种[]操作,动态块的操作动态块其实应该属于高级用户的范畴,在本贴Φ我的初衷是想为初学者提供一种思维的路径(注意只是一种而已,当然每个人的习惯不同可以有很多种),但因动态块的功能越来樾受到重视所以,本文只是简单地叙述一下以求起到抛砖引玉的作用。好让更多的人知道有其物哪怕不知其实也不打紧,只要想仔細地学习网上有好多非常详细的学习资料,因动态块的复杂性绝非一贴所能解决(何况,我也正在学习之中以前多用2004版CAD,无此功能)


动态块定义:  ㊣所谓[动态块]就是指,由[块编辑器]向块添加一些参数、动作从某种意义上来说,[块]就具有了动态行为这就成了[动態块]。具有操作灵活、使用方便快捷的特点正如本文标题所说,要想“快剑如风”建议您不要忽略了[动态块]  在AutoCAD中,有一个[工具选项板窗口]列出了一些常用的[动态块],您可以直接选用当然,您也可以自己根据自己的需要进行标新创异让您在自己的CAD王国里创业垂统。  (注:[动态块]只有在高版本的AutoCAD中才有属于欧特克新开发的功能,可能是从2006版之后才出现的)【如果您想深入了解,推荐本坛内一位叫鍢至心灵的网友所传的视频教程讲解得非常详细:《AutoCAD2011动态图块详解(视频播放1小时),地址:]


我要回帖

更多关于 ps修改数字和原图一样 的文章

 

随机推荐