数字图像处理_数字图像的基本知识

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 展示图片
def show(img):
    if img.ndim == 2:
        plt.imshow(img, cmap='gray')
    else:
        plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
    plt.show()

图片的数字存储

在这里插入图片描述

灰度图用二维矩阵表示,RGB彩色图用三维矩阵表示。
在这里插入图片描述

3个灰度图 融合成 彩色图
在这里插入图片描述

b = np.array([
    [0, 127, 255],
    [255, 0, 255],
    [10, 50, 100]
], dtype=np.uint8)

g = b.T
r = b - g

show(b)

show(cv.merge([r, g, b]))

在这里插入图片描述
在这里插入图片描述

图片的颜色转换

## 1. 图像读取
img = cv.imread('pic/bear500x333.jpg')
show(img)

在这里插入图片描述

## 2. 彩色图转灰度图
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
show(img_gray)

在这里插入图片描述

## 3. 二值化图像(灰度图转二值图)
# 灰度值在125以上的,变成240
_, img_bin = cv.threshold(img_gray, 125, 240, cv.THRESH_BINARY)
show(img_bin)

在这里插入图片描述

图像保存

## 4. 保存图像
cv.imwrite('pic/bear_gray.jpg', img_gray)

True

通道分离与合并

## 5. 通道分离
b, g, r = cv.split(img)

## 6. 通道合并
img_new = cv.merge([b, g, r])

show(img_new)

在这里插入图片描述

加减乘除

# 背景
bg = cv.imread('pic/line500x500.jpg', 0)

# 前景
ob = cv.imread('pic/hedgehog500x500.jpg', 0)

show(np.hstack([bg, ob]))

在这里插入图片描述

# 图像相加
## 如果灰度值超出255,则进入下一个 0~255的循环
# img_add = cv.add(bg*0.5, ob*0.5)
img_add = bg * 0.5 + ob * 0.5
show(img_add)

在这里插入图片描述

# 图像相减
# img_sub = img_add - bg * 0.5
img_sub = cv.subtract(img_add, bg * 0.5)
show(img_sub)

在这里插入图片描述

# 图像相乘

# 掩膜
mask = cv.imread('pic/mask500x500.jpg', 0)

show(np.hstack([ob, mask]))

在这里插入图片描述

img_mul = cv.multiply(ob/1.0, mask/255)
show(img_mul)

在这里插入图片描述

# 图像相除

ob_noise = cv.imread('pic/hedgehog_noise_500x500.jpg', 0)
show(np.hstack([ob, ob_noise]))

在这里插入图片描述

img_div = cv.divide(ob, ob_noise+1)
show(img_div)

在这里插入图片描述

图像像素非线性变换

逐像素运算就是对图像中的每一个像素点的亮度值,通过一定的函数关系,转换到新的亮度值。

这个转换可以由函数表示:s=f®

其中r为原来的像素值,s为新的像素值。

img2 = cv.convertScaleAbs(img, alpha=1, beta=0)

线性变换:
s = b + k r s = b + kr s=b+kr

非线性变换:
s = a + l n ( r + 1 ) b s = a + \frac{ln(r+1)}{b} s=a+bln(r+1)

gamma变换:
s = c r γ s = cr^\gamma s=crγ

实例:图像融合

# 实例
bg = cv.imread('pic/petal500x500.jpg')
ob = cv.imread('pic/hedgehog500x500.jpg')
mask = cv.imread('pic/mask500x500.jpg')

show(np.hstack([bg, ob, mask]))

在这里插入图片描述

# 前景选择
ob_select = np.float32(ob/1.0) * np.float32(mask/255.0)
show(np.uint8(ob_select))

在这里插入图片描述

# 背景选择
bg_select = np.float32(bg/1.0) * np.float32(1-mask/255.0)
show(np.uint8(bg_select))

在这里插入图片描述

# 图像融合
nice = cv.add(ob_select*0.8, bg_select).astype(np.uint8)
show(nice)

在这里插入图片描述

# 保存图片
cv.imwrite('pic/image_mix.jpg', np.hstack([bg, ob, nice]))

True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

¥骁勇善战¥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值