高级数字图像处理学习(一)

  • 为了让计算机处理图像,图像必须经历数字化。
  • 图像经过采样、量化后变为数字存储在计算机中,使用计算机对数字图像进行去噪、复原、分割、特征提取等处理,就称为数字图像处理。
  • 数字图像处理既涉及到计算机软件,也和硬件相关。
  • 图:物体反射或投射光的分布。
  • 像:人的视觉系统所接受的图在人脑所形成的印象或认识。
  • 微波雷达:可以全天候全天时工作。微波的波长比可见光和红外线长,几乎不受云雾的散射影响。
  • 一副图像是由许多单元组成的集合,对于2D图像为像素(pixel),其值称为图像的灰度或亮度(intensity)
  • 空间坐标离散化:确定了图像的空间分辨率。
  • 像素值离散化:确定了图像的灰度阶。
  • 水平和垂直方向上的采样点数越多,图像像素数目越多,分辨率越高。
  • 人眼对蓝光的灵敏度要比红光和绿光低得多
  • 二值图像:由0、1两个值构成,0代表黑色,1代表白色,每个像素由1bit表示,二值图通常用于文字图像和掩膜图像。
  • 灰度图像:每个像素所需的字节数根据其灰度的变化范围不同而不同。
  • 256级灰度图每个像素需用8bit表示,灰度值域[0,255],0:黑色,255:白色。医学图像:CT、MRI图像。
  • RGB图像:图像的灰度为该点的R、G、B值,直接存放在图像灰度矩阵中。一般每个像素需要用3x8=24bit位来表示。其色彩为2^24,一般称为真彩图像。
  • 索引图像:每个像素的值并不表示该像素真正的灰度值,而是表示对应于色彩表中的索引号。色彩表为预先设置的RGB色彩。

图像格式:

  • GIF:8位文件格式,最多只能存储256色图像,基于LZW算法的无损压缩格式,其压缩率一般在50%左右。一个GIF可以存多幅图像以实现网页上的动画。
  • BMP:Windows系统下的标准位图格式,未经过压缩。头文件数据结构:包含BMP图像文件的类型、显示内容等信息。信息数据结构:包含BMP图像的宽、高、压缩方法、以及定义颜色等信息。调色板:这个部分可选,有些位图需要调色板,有些位图比如真彩色图(24位的BMP)不需要调色板。
  • 位图数据,在24为图中直接使用RGB,而其他小于24位的使用调色板中颜色索引值。
  • 图像工程:图像处理、图像分析、图像理解
  • 图像处理:图像处理是比较低层的操作,主要在图像像素级上进行处理。对输入图像进行某种处理,输出通常是另一幅图像。
  • 图像复原:将图像退化的过程模拟化,并采用相反的过程来会恢复出原始图像。求解:在图像退化确知的情况下,图像退化的逆过程是有可能进行的,这属于反问题求解。
  • 图像模糊的原因:相机移动、目标移动。

读写图像灰度变换

import cv2
import numpy as np

# 读入图像
img = cv2.imread('image\h.jpg')
cv2.imshow('name',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 读入图像转换为灰度图像
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 彩色转灰度的公式
# Gray = R * 0.299 + G * 0.587 + B*0.114
# cv2.imread()读取的图片格式是BGR

bImg,gImg,rImg = cv2.split(img) # 拆分为BGR独立通道
Graying = np.zeros_like(bImg,dtype = 'uint8') # 创建与bImg相同形状的黑色图像
Graying = (np.uint8)rImg*0.299 + gImg*0.587 + bImg * 0.114 # 转换成整数

cv2.imshow('Grayimg',Graying)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像缩放

import cv2
import numpy as np

# 读入图像
img = cv2.imread('img\h.png')
cv2.imshow('name',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

target_size = (400,200) #(宽,高)
img_scale = cv2.resize(img,target_size)
cv2.imshow('name',img_scale)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意:在使用cv2.imread()读取RGB图像时,得到的array的shape是(高,宽)。
但是在使用cv2.resize()时,第二个参数是输出图像的(宽,高)

显示视频

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

v = cv2.VideoCapture('video/tian.mp4')
if v.isOpen():
	open.frame = v.read()
else:
	open = False

while open:
	re,frame = v.read()
	if frame is None:
		break
	if re == True:
		# 把每一帧图片变为灰色
		frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
		# 截取图片中的一小块
		frame = frame[500:800,500:800]
		# 改变图片->视频尺寸
		frame = cv2.resize(frame,(400,200))
		# 按比例压缩图片
		frame = cv2.resize(frame,(0,0),fx=0.4,fy=0.8)
		cv2.imshow('result',frame)
		if cv2.waitKey(10) && 0xFF == 27:
			break
v.release()
cv2.destroyAllWindows()

色彩通道划分
函数cv2.split()将3通道BGR彩色图像分离为B、G、R单通道图像。
函数cv2.merge()将单通道合并成一个3通道图像。

import cv2
import numpy as np

img1 = cv2.imread('image/girl.webp',flags=1) #flags=1 读取彩色图像
cv2.imshow('girl',img1)
cv2.waitKey(0)
cv2.destroyAllWindows() # 释放所有窗口

cv2.imread()所读取的图像格式:每个像素为[B,G,R]格式。
cv2.imshow()显示图像:按图像中每个像素为[B,G,R]的规则将图像显示出来。

# BGR通道拆分
ch1,ch2,ch3 = cv2.split(img1)

print(img1.shape,ch1.shape,ch2.shape,ch3.shape)
cv2.imshow('ch1',ch1)
cv2.imshow('ch2',ch2)
cv2.imshow('ch3',ch3)

cv2.waitKey(0)
cv2.destroyAllWindows() 

mergeImg = cv2.merge([ch1,ch2,ch3])
cv2.imshow('mergeImg',mergeImg)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 但是matplotlib是根据RGB画的
from matplotlib import pyplot as plt
plt.imshow(mergeImg)

显示BGR各个通道

import cv2
import numpy as np

img1 = cv2.imread('image/girl.webp',falgs=1)
ch1,ch2,ch3 = cv2.split(img1)

## 方法1,数组赋值
imgZeros = np.zeros_like(img1) # 创建与img1形状相同的黑色图像

SysImg = imgZeros
SysImg[:,:,0] = ch1 #在黑色图像模板添加B色分量
SysImg[:,:,1] = ch2
SysImg[:,:,2] = ch3

cv2.imshow("image",SysImg)
cv2.waitKey(0)
cv2.destroyAllWindows()

只用一个通道的数据

import cv2
import numpy as np

img1 = cv2.imread('image/girl.webp',flags=1)
bImg,gImg,rImg = cv2.split(img1)

method = 3
if method == 1:
	imgZeros = np.zeros_like(img1)
	BImg = imgZeros
	Bimg[:,:,0] = bImg
elif method == 2:
	zeros = np.zeros(img1.shape[:2],dtype='uint8')
	print(img1.shape,zeros.shape)
	BImg = cv2.merge([bImg,zeros,zeros])
else:
	zeros = np.zeros(bImg.shape,dtype="uint8")
	BImg = np.stack([BImg,zeros,zeros],axis=2)
cv2.imshow('channel B',BImg)
cv2.waitKey(0)
cv2.destroyAllWindows()

matplot_show

# 读取是RGB
from matplotlib import image as mping
from matplotlib import pyplot as plt
img1 = mping.imread('image/girl.webp')
plt.imshow(img1)

import cv2
cv2.imshow("CV2show",img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 把RGB转换为BGR
img2 = cv2.cvtColor(img1,cv2.COLOR_RGB2BGR)
cv2.imshow("image",img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

import numpy as np
ch1,ch2,ch3 = cv2.split(img1)
imgZeros = np.zeros_like(img1)

imgZeros[:,:,0] = ch3
imgZeros[:,:,1] = ch2
imgZeros[:,:,3] = ch1

cv2.imshow("channe l", SysImg)      
cv2.waitKey(0)
cv2.destroyAllWindows()  # 释放所有窗口
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

饼干饼干圆又圆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值