基于OpenCV的图形分析辨认03
���录
一、前言
二、实验目的
三、实验内容
四、实验过程
一、前言
编程语言:Python,编程软件:vscode或pycharm,必备的第三方库:OpenCV,numpy,matplotlib,os等等。
关于OpenCV,numpy,matplotlib,os等第三方库的下载方式如下:
第一步,按住【Windows】和【R】调出运行界面,输入【cmd】,回车打开命令行。
第二步,输入以下安装命令(可以先升级一下pip指令)。
pip升级指令:
python -m pip install --upgrade pip
opencv库的清华源下载:
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
numpy库的清华源下载:
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
matplotlib库的清华源下载:
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
os库的清华源下载:
pip install os -i https://pypi.tuna.tsinghua.edu.cn/simple
二、实验目的
1.了解不同图像亮度变换算法;
2.基于演算法原理,以函数形式实现图像亮度变换;
3.根据实验内容2-4要求,调试出所提供图片对应的参数;
三、实验内容
1.任选一张彩色图完成课堂教授内容,并以函数形式封装功能,包含:
- Image Negatives
- Log Transformations
- Power-Law Transformations
- Piecewise-Linear Transformations
- Contrast Stretching
- Gray-Level Slicing
- Bit-Plane Slicing
2.透过gramma correction,尝试不同参数,将下图還原成原亮度。
3.透过gramma correction,尝试不同参数,将下图還原成原亮度。
4.透过Bit-Plane Slicing,尝试获得下图结果。
Hint:考虑移除细节部分
四、实验过程
根据原理写成一个代码文件,命名为【Methods】,具体代码如下:
import cv2 import numpy as np def Image_Negatives(img): # 将输入图像转换为灰度图像和反转图像的函数 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) dst = 255 - gray return dst def Log(img, c): # 对输入图像进行对数运算并缩放 output = c * np.log(1.0 + img) output = np.uint8(output + 0.5) return output def Gamma(img, k): # 对图像进行伽马校正 img_gamma = np.power(img, k) # 将图像的每个像素值的幂次方为k normImg = 255. * (img_gamma - img_gamma.min()) / (img_gamma.max() - img_gamma.min() + 1e-6) # 对归一化后的图像进行重新线性化 img_Gamma = np.uint8(normImg) # 将归一化后的图像转换为0到255之间的无符号整型 return img_Gamma # 返回伽马校正后的图像 def Contrast_Stretching(img, height, width): rMin = img.min() # 查找图像最低像素值 rMax = img.max() # 查找图像最高像素值 r1, s1 = rMin, 0 # 初始化r1和s1为最低像素值和0 r2, s2 = rMax, 255 # 初始化r2和s2为最高像素值和255 img_Stretch = np.empty((width, height), np.uint8) # 创建一个与输入图像相同大小的空矩阵,用于存储扩展对比度后的图像 k1 = s1 / r1 # 计算k1,用于将低于最低像素值的像素值映射到0 k2 = (s2 - s1) / (r2 - r1) # 计算k2,用于将介于最低像素值和最高像素值之间的像素值映射到0到255的范围 k3 = (255 - s2) / (255 - r2) # 计算k3,用于将高于最高像素值的像素值映射到0到255的范围 for h in range(height): # 遍历图像的每一行 for w in range(width): # 遍历图像的每一列 if img[h, w] = a) & (img1[:, :] = a) & (img1[:, :]