第一章 数字图像本质及基础操作


前言

本章主要讲述数字图像的本质及一些基础操作和一些基础知识。

一、数字图像的本质

数字图像的本质总而言之 言而总之就是由数字构成,其中数字的含义是亮度

对于一个简单的灰度图来说图像就是由一个矩阵所构成,每个矩阵中的元素都表示由黑到白的一个量化,每个元素常用8位二进制表示,十进制范围为0~255
灰度图:
请添加图片描述
放大:由灰度点所组成请添加图片描述
量化矩阵:注意数字图像的原点位于左上角,其中正x轴向下延伸,正y轴向右延伸
在这里插入图片描述

对于一个RGB的彩色图来讲,图像由三个矩阵“叠加”而成,或者称之为由三维矩阵构成,其中每个像素由红绿蓝三种光混合而成,因此RGB称为数字图像的三原色。
在这里插入图片描述
在这里插入图片描述

不同于小时候学的绘画的三原色—红黄蓝,因为他们表现颜色的方式不太一样,图画的三原色是一种减色原理,数字图像的显色原理是一种加色原理,具体可百度。

二、图像基础理论

1.色彩空间

1.1 RGB模型

根据光学的三原色而来,图像中的一个像素点由一个数组 [R,G,B] 构成,一般该数组的类型为一个字节的无符号整型

**而在OpenCV中,采用的是反人类的 [B, G, R]

1.2 HSV模型

HSV模型的像素点也是通过一个三维向量进行表示:

  • Hue:色相,将所有颜色通过一个数值进行表示
  • Saturation:饱和度,颜色与白色的混合程度
  • Value:明度, 颜色的明亮程度请添加图片描述

RGB模型可转到HSV模型,具体可参考网上,有具体的公式。

1.3 HSL模型

整个形式和HSV类似

  • Hue:色相, 与HSV类似
  • Saturation:饱和度,颜色的稀释程度
  • Lightness/Brightness:被灯光照的的亮度

比较:

色相饱和度明亮度
HSV所有颜色色相中混入白色的量色相中混入黑色的量
HSL所有颜色色相被稀释的程度拿灯光照射的情况,没光线就黑,强烈光线就白

1.4 YUV模型

  • 作用:可以对色彩空间进行压缩,说人话就是缩减了用来表示像素颜色的数据量,这就使得该模型在图像、视频压缩上应用广泛。
  • 思想:由于人眼对颜色的感知能力较弱,反而对光影关系(黑白图)更为敏感。所以,在YUV模型中,精确保留了图片的黑白关系,而对颜色信息进行了部分删除。
  • 通道
    • Y:该通道存储的是黑白关系,即灰度图
    • UV:这两个通道存储了颜色信息。在对图片颜色时,首先就会对这两个通道的颜色数据进行丢弃。
  • 色彩空间压缩:设有4个像素,每个像素都要3个通道值表示颜色,一个通道为一个字节,那么所有数据一共就有4 × 3 ×1 B = 12 B。现在通过YUV模型对图片进行压缩,丢掉一半的颜色信息,Y通道全部保留4 × 1B = 4B, UV通道丢弃一半就是4 × 2 × 1 B / 2 = 4B,最后数据大小就为4B + 4B = 8B
  • 采样方式: 对于Y全部保留, 对UV进行不同程度的取舍
  • RGB与YUV转换
    [ Y U V ] = [ 0.299 0.587 0.114 − 0.187 − 0.3313 0.5 0.5 − 0.4187 − 0.0813 ] [ R G B ] + [ 0 128 128 ] \begin{bmatrix} Y\\ U\\ V\end{bmatrix} =\begin{bmatrix} 0.299 & 0.587 & 0.114\\ -0.187 & -0.3313 & 0.5\\ 0.5 & -0.4187 & -0.0813\end{bmatrix}\begin{bmatrix} R\\ G\\ B\end{bmatrix} + \begin{bmatrix} 0\\ 128\\ 128\end{bmatrix} YUV = 0.2990.1870.50.5870.33130.41870.1140.50.0813 RGB + 0128128

1.5 灰度图

灰度图是指一幅图像中每个像素点的亮度只有一个值,而没有颜色信息的图像。通常将灰度值从0~255之间的整数表示,灰度值越大,表示像素越亮,反之则越暗。灰度图常用于图像处理、计算机视觉、医学图像、机器人控制等领域。

1.6 OpenCV中色彩空间转换

import cv2

# 读入一张RGB图像
img = cv2.imread('image.jpg')

# 将RGB图像转换为灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 将灰度图像转换为RGB图像
rgb_img = cv2.cvtColor(gray_img, cv2.COLOR_GRAY2BGR)

其中,第一个参数是要转换的图像,第二个参数是转换类型。可以使用cv2.COLOR_前缀下的常量来表示不同的色彩空间。例如,BGR转换为灰度图使用cv2.COLOR_BGR2GRAY,灰度图转换为RGB图像使用cv2.COLOR_GRAY2BGR。

除了常用的色彩空间转换之外,还可以使用cv2.cvtColor()函数将HSV、YUV等颜色空间相互转换。

2.图片的存储

  • Python实现:读取的图片类型为**<class ‘numpy.ndarray’>**, 即图片其实是一个数据
    • uint8: 一字节的无符号整数
    • 数据维度: 三维,【高度像素下标,宽度像素下标,RGB值】
  • C++底层实现: Python的OpenCV其实就是对C++的版本进行了再次封装实现。在C++中采用数据结构Mat来对图片进行存储。
class CV EXPORTS Mat{
 public:
     int dims;//维数
     int roWs,cols;//行列数
     unsigned char * data;//存储数据的指针
     int* refcount;//引用计数
    ........
}

从Mat中可以看出,图片数据其实存放在unsigned char *指针指向的一片内存中,也就是说图片数据与Mat类型是分开存放的,这就存在深浅拷贝问题。而Numpy也很好的将该结构继承了下来。

  • Numpy深浅拷贝:
    NumPy的深浅拷贝和Python的深浅拷贝类似,同样也会涉及到数据的内存管理问题。

首先,NumPy的浅拷贝操作可以使用数组的view()方法。view()方法创建一个新的数组对象,与原始数组共享相同的数据缓冲区,但视图对象本身是新的。改变视图对象的形状或维度会更改原始数组的形状或维度。下面是一个使用view()方法的例子:

import numpy as np

# 创建原始的NumPy数组
a = np.array([[1, 2, 3], [4, 5, 6]])

# 使用view()方法创建视图数组
b = a.view()

# 改变视图数组的形状
b.shape = (3,2)

# 查看原始数组和视图数组
print(a)    # 输出 [[1, 2], [3, 4], [5, 6]]
print(b)    # 输出 [[1, 2], [3, 4], [5, 6]]

在上述例子中,通过view()方法创建了视图数组b,原始数组a和视图数组b共享数据缓冲区,因此b的形状的更改也会影响到a的形状。

其次,NumPy的深拷贝操作需要使用copy()方法。与Python的深拷贝类似,copy()方法将复制原始数组及其数据缓冲区,并创建一个新的数组对象,这个新的数组对象是完全独立于原始数组的。下面是一个使用copy()方法的例子:

import numpy as np

# 创建原始的NumPy数组
a = np.array([[1, 2, 3], [4, 5, 6]])

# 使用copy()方法创建深拷贝数组
b = a.copy()

# 改变深拷贝数组的值
b[0,0] = 7

# 查看原始数组和深拷贝数组
print(a)    # 输出 [[1, 2, 3], [4, 5, 6]]
print(b)    # 输出 [[7, 2, 3], [4, 5, 6]]

在上述例子中,使用copy()方法创建了深拷贝数组b,并将b的第一个元素修改为7,而原始数组a并没有受到影响。

需要注意的是,在使用NumPy进行数组操作时,浅拷贝和深拷贝的使用方法与传统的Python列表有所不同。建议在具体使用时,根据需求选择合适的拷贝方式。

3.图像参数

  • 像素: 图片中的一个颜色块
  • 颜色通道: 表示一个像素(颜色)的向量的分量,一个分量就是一个颜色通道,例如RGB模型,像素的组成就为 【R, G, B】 , 这就有三个颜色通道
  • 位深: 一个颜色通道值由几位二进制数表示
  • 像素块坐标: 图片的左上角为坐标原点,一个坐标对应一个像素
  • 分辨率: 图像像素的宽度 ×图像像素的高度

三、图像的基础操作及OpenCV画图

1. OpenCV 窗口界面

OpenCV中有关界面的一些函数:

# 导入 OpenCV
import cv2

# 创建窗口,
cv2.namedWindow('window',cv2.WINDOW_NORMAL)

cv2.namedWindow(winname, flags)
其中:

  • winname 参数是要创建的窗口的名称,类型为字符串;
  • flags 参数是窗口的属性标志,类型为整数。默认值为cv2.WINDOW_AUTOSIZE,表示窗口大小自动调整为显示的图像大小。也可以设置为 cv2.WINDOW_NORMAL,表示可以重新调整窗口大小。
# 更改窗口:window_autosize,设置大小无用
cv2.resizeWindow('window',width=800,height=600)

# 展示窗口、图片等
cv2.imshow('window',0)

# 等待按键
# 1. 将窗口堵塞。等带按键、并会返回按键的ASCII码
# 2. 可以设置等待的时间,单位 ms
# 3. 等待时间为 0 ,则为一直等待 
key = cv2.waitKey(0)

# ord():获取字符的ASCII码
# key & 0xFF:将 int 类型的低字节给提去出来,因为ASCII码为一字节
if key & 0xFF == ord('q'):
    # 销毁窗口
    cv2.destroyAllWindows()

2. 图像基本操作

2.1 图像的输入与输出

# 读取图片
cv2.imread(图片路径,flags)

# 显示图片
cv2.imshow('名字',image)

# 图片保存
cv2.imwrite(保存路径)

# 图片显示函数
def showImage(name:str,image):
    """ 显示图片的函数 """
    cv2.imshow(name,image)
    cv2.waitKey(0) 
    cv2.destroyAllWindows()

对于 cv2.imread(图片路径,flags):

  • filename:要读取的文件名,可以是相对路径或绝对路径。
  • flag:指定读取图像的方式,包括cv2.IMREAD_COLOR(默认)、cv2.IMREAD_GRAYSCALE、cv2.IMREAD_UNCHANGED等。

2.2 图像数组操作

Note:
由OpenCV读取的图片,其通道顺序为:B G R 而非:R G B
根据图片的数组本质,就能通过numpy自定义纯色图片:blackImg = np.zeros(shape=(height, width, 3), dtype=np.uint8)

# 裁剪图片:将原图片的高度 100 - 200 的像素;宽度 50 - 100 的像素。提取出来
img[ 100:200,50:100,: ]

# RGB 通道的拆分:结果为:高度像素 x 宽度像素 的二维数组
方法1:
b,g,r = cv2.split(img)
方法2:
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]

# 合并多个被拆分出来的通道:将三个二维数组,组合成三维的数组
img = cv2.merge((b,g,r)) 

# 单通道图片
b = img[:,:,0]
g = img[:,:,1] * 0
r = img[:,:,2] * 0
imgB = cv2.merge((b,g,r))
 
# 纯色图片
blackImage = np.zeros(shape=(380,640,3),dtype=np.uint8)
whiteImage = np.full(shape(10,10,4),fill_value=255,dtype=np.uint8)

2.3 修改像素尺寸

作用: 图像数据本质就是一个三维矩阵,在对多个图像进行数学运算时,就需要同步矩阵维度。

cv2.resize是OpenCV的一个函数,用于改变输入图像的大小。它的语法格式为:

dst = cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

其中,参数含义如下:

  • src:输入图像。

  • dsize:目标图像的大小,可以是一个二元组 (width, height),或者一个整数 d 表示目标图像的宽高相等。

  • dst:输出图像,这个参数可以不传递。

  • fxfy:可选的缩放因子,用于在水平和垂直方向上分别对图像进行缩放。当不指定 dsize 时,就需要指定 fxfy 中的一个,把dsize设置为(0,0)再使用这个

  • interpolation:所采用的插值方法,包括以下几种:

    • cv2.INTER_NEAREST

      最近邻插值法,输出像素的值由最近邻的输入像素确定。

    • cv2.INTER_LINEAR

      双线性插值法,输出像素的值由最近的四个输入像素按照距离加权平均所得。

    • cv2.INTER_AREA

      区域插值法,输出像素的值基于像素区域像素的平均值进行计算。这种方法通常用于缩小图像时。

    • cv2.INTER_CUBIC

      双三次插值法,输出像素的值基于最近的16个输入像素按照距离加权平均所得。

    • cv2.INTER_LANCZOS4

      Lanczos插值法,输出像素的值由Lanczos窗口内像素的加权平均值计算所得。

cv2.resize函数返回一个大小为 dsize 的输出图像 dst,如果不指定 dst,则函数会自动创建一张与 src 大小相同的输出图像。需要注意的是,调整图像大小会改变像素值,因此在对图像进行一些后续处理时,需要特别小心。

3. 视频的基本操作

3.1 视频的本质

视频本质上就是由一个图片的数组加音频组合而成的文件。视频播放时,就是按照一定时间间隔依次读取图片数组中的图片并显示。这个时间间隔为帧数,即一秒钟能显示多少张图片。

3.2 视频的输入与输出

3.2.1 视频文件读取
import cv2

# 读取视频
video = cv2.VideoCapture('视频路径'/相机设备编号)
'''
使用cv2.VideoCapture时,需要指定捕获设备的索引号
(例如相机设备的编号为0),或者指定视频文件路径和名称。
然后通过循环一帧一帧地读取视频或图像,并加以处理或显示。
'''

# 视频读取
while video.isOpened():
    # 读取一帧
    flag,frame = video.read()
    # 显示
    if flag == True:
        cv2.imshow('video',frame)
    # 控制播放速度:以 60 帧的速度进行图片显示
    if cv2.waitKey(1000 // 60) == ord('q'):
        break 
        
# 释放
video.release()
cv2.destroyAllWindows()

3.2.2 视频保存
import cv2

# 调用摄像头,抓取图片。设备连接的摄像头从 0 开始编号
video = cv2.VideoCapture(0)

# 视频保存格式
videoForm = cv2.VideoWriter_fourcc(*'mp4v')

# 保存视频的类,输入参数为:
# 保存路径,保存格式,保存的视频帧数,(宽度像素,高度像素) 
videoSave = cv2.VideoWriter('./asset/capture.mp4',videoForm,24,(640, 480))

# 视频读取
while video.isOpened():
    # 读取一帧
    flag,frame = video.read()
    # 是否读取成功
    if flag == True:
        # 显示
        cv2.imshow('video',frame)
        # 保存
        videoSave.write(frame)
    # 控制播放速度:以 60 帧的速度进行图片显示
    if cv2.waitKey(1000 // 24) == ord('q'):
        break 
# 释放
videoSave.release()
video.release()
cv2.destroyAllWindows()

Notes:视频保存的帧率本质上还是由你的摄像头硬件决定,帧率越高录制的视频越细腻,越丝滑,你用VideoWriter设置的视频帧率若与摄像头拍摄帧率不符的话,只会加快或减慢视频的播放,不能改变视频的丝滑程度。

获取摄像头的像素:

import cv2
#读取视频
video = cv2.VideoCapture(0)

#读取一帧
flag, frame = video.read()

#查看像素
print(frame)

这里的print(frame)输出的像素值为(高度, 宽度, 颜色通道), 而cv2.VideoWriter设定的像素值应当为(宽度, 高度)

4. OpenCV画图

4.1 几何图形

4.1.2 直线、圆形、矩形
# %% 画直线、圆形、矩形
import cv2
import numpy as np

# 创建窗口
cv2.namedWindow("draw_shape", cv2.WINDOW_NORMAL)
cv2.resizeWindow("draw_shape", width=640, height=360)

# 必须先有一张背景图,用来当画布
canvas = np.zeros(shape=(360, 640, 3), dtype=np.uint8)
canvas[:, :] = [230, 230, 250]  # 背景颜色

# 矩形
# rectangle(canvas:img, pt1:tuple, pt2:tuple, color[, thickness[, lineType[, shift]]]) -> img
imgRect = cv2.rectangle(canvas, (20, 40), (100, 100), (255, 0, 0), 3)

# 圆形
# circle(canvas:img, center:tuple:, radius, color[, thickness[, lineType[, shift]]]) -> img
imgCircle = cv2.circle(canvas, (200, 60), 50, (0, 0, 255), 3, 16)

# 直线
# img = cv2.line()
# line(canvas:img, pt1:tuple, pt2:tuple, color[, thickness[, lineType[, shift]]]) -> img
imgLine2 = cv2.line(canvas, (20, 150), (200, 170), (255, 0, 0), 20, 2)
imgLine8 = cv2.line(canvas, (20, 200), (200, 220), (255, 0, 0), 20, 8)
imgLine16 = cv2.line(canvas, (20, 250), (200, 270), (255, 0, 0), 20, 16)
cv2.imshow("draw_shape", canvas)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

  • 画布:每个Canvas表示一个对象,可对同一个对象绘制不同的图形。
  • 传参数注意:
    • LineType:该值控制的是抗锯齿效果,值越大,线条越光滑。取值通常是 2 n 2^n 2n
    • pt:所有点的坐标表示为(横向坐标,纵向坐标)
    • color:通道为(B, G, R)
4.1.3 椭圆
# 椭圆
# axes:长轴、短轴
# angle:椭圆倾斜角度,顺时针
# ArcStartAngle, ArcEndAngle:起始弧长和终止弧长,顺时针
ellipse(img, center:tuple, axes:tuple, angle,
        ArcStartAngle, ArcEndAngle, 
        color[, thickness[, lineType[, shift]]]) -> img

4.1.4 多边形
# 多边形
# polylines(img, [pts:numpy.ndarray], isClosed, 
#                color[, thickness[, lineType[, shift]]]) -> img
canvas = np.zeros(shape=(360, 640, 3), dtype=np.uint8)
canvas[:, :] = [230, 230, 250]  # 背景颜色
pts1 = np.array([(20, 60), (70, 20), (300, 150), (50, 300)])
cv2.polylines(canvas, [pts1], True, (255, 0, 0))
# 填充的多边形
fillPoly(img, [pts], color[, lineType[, shift[, offset]]]) -> img

在这里插入图片描述

4.2 文本

4.2.1 英文
# fontfamily:cv2.FONT_ 进行查看
cv2.putText(img, text, org, fontFace, fontScale, color[, thickness=None, lineType=None, bottomLeftOrigin=None])

示例:

import cv2
import numpy as np

# 多边形
# polylines(img, [pts:numpy.ndarray], isClosed,
#                color[, thickness[, lineType[, shift]]]) -> img
canvas = np.zeros(shape=(300, 300, 3), dtype=np.uint8)
canvas[:, :] = [230, 230, 250]  # 背景颜色
cv2.putText(
    canvas,
    "Hello World",
    (60, 150),
    fontFace=cv2.FONT_HERSHEY_SIMPLEX,
    fontScale=1,
    color=(0, 255, 0),
    thickness=2,
)
cv2.imshow("ss", canvas)
cv2.waitKey(0)

在这里插入图片描述

4.2.2 中文
import cv2
from PIL import ImageFont, ImageDraw, Image
import numpy as np

# 加载图像
canvas = np.zeros(shape=(150, 300, 3), dtype=np.uint8)
canvas[:, :] = [250, 230, 230]

# 定义中文字体
font_path = "C:\Windows\Fonts\simhei.ttf"  # 字体文件路径
font = ImageFont.truetype(font_path, 24)

# 定义文件路径
text = "你好世界!"

# 在图像中定义中文字体
img_PIL = Image.fromarray(cv2.cvtColor(canvas, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(img_PIL)
draw.text((50, 50), text, font=font, fill=(0, 255, 0))  # 填充绿色
img = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR)

# 显示图像
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

总结

本章主要记载了图像的一些理论知识以及图像的基本操作和OpenCV的一些简单使用,能够加深自己对图像的理解,同时也为后面的学习打下基础,当然了里面还有很多东西我没有细讲 比如一些插值算法,后面如果涉及的话再说。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 1. 试述计算机图形学研究的基本内容? 答:见课本P5-6页的节. 2. 计算机图形学、图形处理与模式识别本质区别是什么?请各举一例说明. 答:计算机图形学是研究根据给定的描述,用计算机生成相应的图形、图像,且所生成 的图形、图像可以显示屏幕上、硬拷贝输出或作为数据集存在计算的学科.计算机图 形学研究的是从数据描述到图形生成的过程.例如计算机动画制作. 图形处理是利用计算机对原来存在物体的映像进行分析处理,然后再现图像.例如工业 的射线探伤. 模式识别是指计算机对图形信息进行识别和分析描述,是从图形〔图像〕到描述的表达过 程.例如分捡设备扫描信件上手写的邮政编码,并将编码用图像复原成数字. 3. 计算机图形学与CAD、CAM技术关系如何? 答:见课本P4-5页的节. 4. 举3个例子说明计算机图形学的应用. 答: 事务管理的交互绘图 应用图形学最多的领域之一是绘制事务管理的各种图形.通过从简明的形式呈现出数据 的模型和趋势以增加对复杂现象的理解,并促使决策的制定. 地理信息系统 地理信息系统是建立在地理图形基础上的信息管理系统.利用计算机图形生成技术可 以绘制地理的、地质的以与其它自然现象的高精度勘探、测量图形. 计算机动画 用图形学的方法产生动画片,其形象逼真、生动,轻而易举地解决了人工绘图时难以解 决的问题,大大提高了工作效率. 5. 计算机绘图有哪些特点? 答:见课本P8页的节. 6. 计算机生成图形的方法有哪些? 答:计算机生成图形的方法有两种:矢量法和描点法. 矢量法:在显示屏上先给定一系列坐标点,然后控制电子束在屏幕上按一定的顺序扫 描,逐个"点亮〞临近两点间的短矢量,从而得到一条近似的曲线.尽管显示器产生的只是 一些短直线的线段,但当直线段很短时,连成的曲线看起来还是光滑的. 描点法:把显示屏幕分成有限个可发亮的离散点,每个离散点叫做一个像素,屏幕上 由像素点组成的阵列称为光栅,曲线的绘制过程就是将该曲线在光栅上经过的那些像素点 串接起来,使它们发亮,所显示的每一曲线都是由一定大小的像素点组成的.当像素点具有 多种颜色或多种灰度等级时,就可以显示彩色图形或具有不同灰度的图形. 7、当前计算机图形学研究的课题有哪些? 答:见课本P10-11页的1.4节. 8、简述三维图形生成和输出的流水线? 答:见课本P13页.节. 9、向量图形和点阵图形之间的区别有哪些? 答:通过矢量法产生的图形称为矢量图形或者向量图形,用描点法产生的图形称为点阵图 形.向量图形区别点阵图形的特点在于描述图形几何形状的数学模型与依据此模型生成几 何图形的计算机命令.向量图形由各个基本图形构成,这就要求各个基本图形有各自独立 的信息.如果用点阵图形来表示一个向量图形,构成向量图形的某个基本图形<如直线段、 圆弧等>的所有点应有一个信息.因此,在描述一个基本图形时,同时要描述其相应的信息 .向量图形最基本的优点是它本身是由精确的数据给出,所以可以充分利用各种输出图形 设备的分辨率尽可能精确地输出图形.也正因为如此,向量图形的尺寸可以任意变化而不 损失图形显示的质量.但是向量图形仅适合于描绘简单图形,而点阵图形可以描绘绚烂多 彩的复杂图形. 10、什么是虚拟现实技术和可视化技术? 答:虚拟现实技术:利用计算机生成一种模拟环境,通过多种传感器和设备使用户"投 入〞到该环境,实现用户和该环境直接进行交互的技术.例如模拟飞机驾驶舱. 可视化技术:通过对空间数据场构造间几何因素,或用图形绘制技术在屏幕上产生 二维图像.例如分子模型构造. 第二章 1、计算机图形系统有什么特点?有哪些主要功能? 答:课本的图2.1展示了计算机图形系统的组成.计算机图形系统是为了支持应用程序 ,便于实现图形的输入输出的硬件和软件组合体.没有图形系统支持,就难以实现应用软件 的开发.主要功能见课本2.1.2节. 2、计算机图形系统有哪几种?各有什么特点? 答:一种分类方法:交互式图形系统允许操作者以某种方式<对话方式或命令方式>来 控制和操作图形生成过程,使得图形可以边生成、边显示、边修改,直至符合要求为止.而 被动式绘图系统,图形在生成过程,操作者无法对图形进行实时操作和控制,不具备交互 功能,只提供各种图形命令或图形程序库,通过编程获得所需图形. 另一种分类方法:见课本节,分为脱机绘图系统、联机绘图系统和交互式绘图系统. 3、阴极射线管由哪些部分组成?它们的功能分别是什么? 答:CRT由四部分组成:电子枪、聚焦系统、偏转系统和荧光屏,这四部分都在真空管 内.电子枪由灯丝、阴极和控制栅极组成.灯丝加热阴极,阴极表面向外发射自由电子,控 制栅控制自由电子是否向荧光屏发出,若允许电子通过,形成的电子流在到达屏幕的途 ,被聚焦系统〔电子透镜〕聚焦成很窄的电子束

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值