正文

0.1 图像基础

  • 矩阵
  • 分辨率
  • 8位整型图像
  • 浮点数图像

0.2 通道分离与合并

b, g, r = cv.split(img)
img_new = cv.merge([b, g, r])

0.3 彩色图转灰度图

img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

0.4 二值化图像

_, img_bin = cv.threshold(img_gray, th1, th2, cv.THRESH_BINARY)

0.5 图像运算

img = cv.add(img1, img2)
img = cv.addWeighted(img1, alpha, img2, beta, gamma)
img = cv.subtract(img1, img2)
img = cv.multiply(img1, img2)
img = cv.divide(img1, img2)

0.6 图像像素非线性变换

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

\[s = b + kr \]

\[s = a + \frac{ln(r+1)}{b} \]

\[s = cr^\gamma \]

实例:图像融合

效果

代码

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv

def show(img):
    if img.ndim == 2:
        plt.imshow(img, cmap='gray')
    else:
        plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
    plt.show()

# 读取图像
A = cv.imread('pic/petal500x500.jpg')
B = cv.imread('pic/hedgehog500x500.jpg')
M = cv.imread('pic/mask500x500.jpg')

show(np.hstack([A, B, M]))

# 合并图像
M = M / 255
As = A * (1 - M)
Bs = B * M
nice = As + Bs*0.8

show(np.uint8(np.hstack([As, Bs])))
show(nice.astype(np.uint8))

说明:

  1. 未经许可,谢绝转载。
  2. 本教程为《数字图像处理Python OpenCV实战》的配套代码相关内容。
    免费视频教程为0-6章(标题号≤6),可在此处点击观看。
    所有课件及源代码可在此处下载:
    链接:https://pan.baidu.com/s/198PySe_vebO3e06idHSQ6g
    提取码:11o4
    有问题可在QQ群(1079300899)指出,进群答案:数字图像处理。在本文评论指出可能导致回复很晚。