资源简介
我自己写的,不好别骂。
代码片段和文件信息
import cv2
import numpy as np
# 块大小
Block_Size = 8
# 保存上一个块的DC系数
DC_y = 0
DC_cr = 0
DC_cb = 0
# zig zag方向
right = 0
down = 1
right_up = 2
left_down = 3
# 亮度量化表
Luminance_Quantization_Table = [
[16 11 10 16 24 40 51 61]
[12 12 14 19 26 58 60 55]
[14 13 16 24 40 57 69 56]
[14 17 22 29 51 87 80 62]
[18 22 37 56 68 109 103 77]
[24 35 55 64 81 104 113 92]
[49 64 78 87 103 121 120 101]
[72 92 95 98 112 100 103 99]
]
# 色度量化表
Chrominance_Quantization_Table = [
[17 18 24 47 99 99 99 99]
[18 21 26 66 99 99 99 99]
[24 26 56 99 99 99 99 99]
[47 66 99 99 99 99 99 99]
[99 99 99 99 99 99 99 99]
[99 99 99 99 99 99 99 99]
[99 99 99 99 99 99 99 99]
[99 99 99 99 99 99 99 99]
]
def quantize(block: np.ndarray flag: int = 0):
res = np.zeros((Block_Size Block_Size) np.float32)
if flag:
# 色度量化
for row in range(Block_Size):
for col in range(Block_Size):
res[row][col] = int(block[row][col] / Chrominance_Quantization_Table[row][col] + 0.5)
else:
# 亮度量化
for row in range(Block_Size):
for col in range(Block_Size):
res[row][col] = int(block[row][col] / Luminance_Quantization_Table[row][col] + 0.5)
return res
def inverse_quantize(block: np.ndarray flag: int = 0):
res = np.zeros((Block_Size Block_Size) np.float32)
if flag:
# 色度量化
for row in range(Block_Size):
for col in range(Block_Size):
res[row][col] = int(block[row][col] * Chrominance_Quantization_Table[row][col] + 0.5)
else:
# 亮度量化
for row in range(Block_Size):
for col in range(Block_Size):
res[row][col] = int(block[row][col] * Luminance_Quantization_Table[row][col] + 0.5)
return res
def encode(block: np.ndarray flag: int):
“““
对块进行DC差分编码和AC行程编码
:param block:
:return: 两个编码结果
“““
global DC_y DC_cr DC_cb
res_code = []
# DC差分编码
if flag == 0:
res_code.append(block[0][0] - DC_y)
DC_y = block[0][0]
elif flag == 1:
res_code.append(block[0][0] - DC_cr)
DC_cr = block[0][0]
elif flag == 2:
res_code.append(block[0][0] - DC_cb)
DC_cb = block[0][0]
# AC行程编码
zero_count = 0
# zig zag遍历
row = 0
col = 1
act = left_down
while row != Block_Size and col != Block_Size:
# 对当前数字进行处理
if block[row][col]:
res_code.append((zero_count block[row][col]))
zero_count = 0
else:
zero_count += 1
if zero_count == 16:
res_code.append((15 0))
zero_count = 0
else:
if row == Block_Size - 1 and col == Block_Size - 1:
res_code.append((zero_count - 1 0))
# 迭代
if act == right:
相关资源
- python人脸识别(opencv)
- 图片智能拼接(opencv)
- 计算机视觉 opencv 数数.ipynb
- python opencv 银行卡识别.ipynb
- python opencv 图片更换背景. ipynb
- 计算机视觉 opencv 答题卡阅卷.ipynb
- 计算机视觉 opencv 检测不合格产品.
- 计算机视觉 opencv 做一个动态时钟.
- 计算机视觉 opencv 哈哈镜
- 计算机视觉 opencv 蒙太奇.ipynb
- 计算机视觉 opencv 超像素分割.ipynb
- 计算机视觉 opencv 医学图片处理.ipy
- 人脸检测和识别(opencv3+python)
- python检测图片是否有人脸
- python语言实现的基于opencv的表针识别
- OpenCV入门教程+OpenCV官方教程中文版
- opencv+Python的教程大全
- opencv手势识别
- Python+OpenCv项目代码
- python 识别物体跟踪
- 通过python使用opencv计算图像的中心
- 用Pythonopencv提取图像中的红色区域
- 段力辉大神翻译原版OpenCV-Python
- OpenCV-Python 中文教程278991
- OpenCV官方教程中文版Python版带完整书
- dlib18.17 编译好的python-dlib库 不需要
- OpenCV Python 手册
- 带图形界面、车牌识别源码python+ope
- 从视频中分离前景目标的Python & Matl
- Python opencv库 cv2.so (armhf版
评论
共有 条评论