数字图像处理笔记(Python)【2】

目录

二、一些名词概念

1.位深度

(1)什么是位深度

(2)位深度读取

2.空间分辨率

(1)空间分辨率 

(2)像元

(3)像解率

(4)瞬时视场角

(5)地面分辨率

三、生成图片


二 一些名词概念

1.位深度

(1)什么是位深度

位深度即为单像素点用多少比特来存储数据。上篇博客提到RGB图像是由三通道(三个0-255值)组成,255转二进制为11111111,所以RGB图像的位深度为24位。同理,二值图像为1位,灰度图像为8位,CMYK为32位。

(2)位深度读取

使用PIL读取图像实际有九种不同的模式:

from PIL import Image
import numpy as np
img1 = Image.open('image/2.jpg').convert('L')   # 灰度图像
img2 = Image.open('image/2.jpg').convert('1')   # 二值图像
img3 = Image.open('image/2.jpg').convert('RGB')   # RGB图像
img4 = Image.open('image/2.jpg').convert('P')
img5 = Image.open('image/2.jpg').convert('RGBA')
img6 = Image.open('image/2.jpg').convert('CMYK')   # CMYK图像
img7 = Image.open('image/2.jpg').convert('YCbCr')
img8 = Image.open('image/2.jpg').convert('I')
img9 = Image.open('image/2.jpg').convert('F')

print(img1.getbands())

当然,不加conver()函数也是可以的。根据输出结果,我们可以判断相应的位深度。

在这里插入图片描述

2.空间分辨率

参考文章:

(49条消息) 什么是空间分辨率?_勤勤恳恳搞代码的博客-CSDN博客_空间分辨率

(1)空间分辨率 

空间分辨率是指遥感图像上能够详细区分的最小单元的尺寸或大小,是用来表征影像分辨地面目标细节的指标。通常用像元大小、像解率或视场角来表示。
遥感图像上能详细区分的最小单元的尺寸或大小,也可以说是能够识别的两个相邻地物的最小距离。空间分辨率数值在地面上的实际尺寸称为地面分辨率。
空间分辨率所表示的尺寸、大小,在图像上是离散的、独立的,它反映了图像的空间详细程度。空间分辨率越高,其识别图像的能力越强。但实际上,空间分辨率的大小仅表明影像细节的可见程度,每一目标在图像上的可分辨程度并不完全取决于空间分辨率的具体数值,而是与目标的形状、大小及它与周围物体的亮度、结构的相对差异有关。

(2)像元

像元是指将地面信息离散化而形成的格网单元,正方形的每个单元网格代表一个像元。像元是扫描影像的基本单元,由亮度值表示。像元大小与遥感影像空间分辨率高低密切相关,像元越小,空间分辨率越大。
需要注意区别像元与分辨率。图像分辨率是指图像的水平像素数x垂直像素数;像元尺寸是指一个像素在长和宽方向上所代表的实际大小。图像大小一定的情况下,像元尺寸越大,分辨率越低,清晰度越低。

(3)像解率

像解率是用单位距离内能分辨的线宽或间隔相等的平行细线的条数来表示,单位为线/mm或线对/mm。

(4)瞬时视场角

瞬时视场角(IFOV)是指传感器内单个探测元件的受光角度或观测视野,又称为传感器的角分辨率,单位为毫弧度(mrad)或微弧度(μrad)。瞬时视场角β与波长λ和收集器的孔径D有关:β=λ/2D
瞬时视场角越小,空间分辨率越高 。

(5)地面分辨率

对于现代的光电传感器图像,空间分辨率通常用地面分辨率和影像分辨率来表示。地面分辨率是指影像能够详细区分的最小单元(像元)所代表的地面实际尺寸的大小。对于某特定的传感器地面分辨率是不变的定值。
影像分辨率是指地面分辨率在不同比例尺的具体影像上的反映。遥感影像的比例尺可以放大或缩小,影像分辨率会随影像比例尺的变化而变化。只有当生成硬拷贝遥感像片时,才使用影像分辨率,计算机荧屏上的影像没有影像分辨率之说。

三 生成图片

“输入图片,处理后输出图片”和“输入图片,处理后输出数据”之前已经实现。本节尝试进行简单地“无输入,生成图片输出”操作。

# -*- coding: utf-8 -*-
import cv2
import numpy as np
from PIL import ImageFont, Image, ImageDraw

# 生成一张图片
def create_pic():
    width = 512
    height = 512
    img = np.zeros([width, height, 3], dtype=np.uint8)
    # 遍历每个像素点,并进行赋值
    for i in range(width):
        for j in range(height):
            img[i, j, :] = [i % 256, j % 256, (i + j) % 256]

    # 展示图片
    # cv2.namedWindow('image', cv2.WINDOW_NORMAL)
    # cv2.imshow('image', img)
    cv2.imwrite("image/test.jpg", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

# 在图片中写入文字
def write_pic(number):
    bk_img = cv2.imread("image/test.jpg")
    # 设置需要显示的字体
    fontpath = "font/simsun.ttc"
    font = ImageFont.truetype(fontpath, 32)
    img_pil = Image.fromarray(bk_img)
    draw = ImageDraw.Draw(img_pil)
    # 绘制文字信息
    draw.text((0, 0), "数字图像处理", font=font, fill=(255, 255, 255))
    draw.text((0, 50), number, font=font, fill=(255, 255, 255))
    bk_img = np.array(img_pil)
    # cv2.imshow("add_text", bk_img)
    cv2.waitKey()
    createName = "image/" + number + ".jpg"
    cv2.imwrite(createName, bk_img)


if __name__ == '__main__':
    create_pic()
    for i in range(1, 4):
        write_pic('test' + "_" + str(i))

猜你喜欢

转载自blog.csdn.net/fjyalzl/article/details/127007788