一、图像的基础

1、像素

这是数字图像中的最小的单元,像素是图像的子采样形式。合并像素以提供完整的图像。

2、图像分辨率

这是图像中出现的像素数。图像包含行和列中的像素,例如640 * 480表示我们有640像素列和480像素行。通过将行中的像素乘以列中的像素来计算像素的总数。

3、测量图像分辨率的单位

有两个用于测量图像分辨率的基本单位

  • 每英 寸像素数(PPI)
  • 每英寸点数(DPI)

4、位图图像

通过将像素值(整数)转换为字节得到的。它们用0和1表示。

5、图像压缩

  • 无损压缩
  • 有损压缩

6、无损压缩

这只会减小图像的大小而不会降低质量。




opencv 电脑配置要求_无损压缩

无损压缩过程



7、有损压缩

有损压缩会使质量有一定的损失,它优先考虑节省空间而不是质量。




opencv 电脑配置要求_opencv rgb yuv 硬件加速_02

有损压缩过程



8、图像文件格式

JPEG:联合图像专家组,有损压缩,照片和绘画。

TIFF:标记的图像文件格式,无损压缩,文档存储、游戏和动画。

GIF:位图图像格式,无损压缩,游戏和动画

BMP:位图,独立于显示设备,在windows中缺乏压缩

PNG:便携式网络图形,无损压缩,通过互联网传输图像。

WebP(由谷歌开发的格式)有损和无损压缩,程序中的消息图片。

SVG:可缩放的向量图形,用于交互和动画,应用也Web开发

二、颜色空间




opencv 电脑配置要求_有损压缩_03

1.RGB颜色模型 2.HSL颜色模型 3.HSV颜色模型



1、颜色模型

颜色模型RGB是最常用的图像数据,也是非常古老的颜色编码。后来HSV(色调饱和度明度)和HSL(色调饱和度亮度)被开发出来,并且发现它与人类感知颜色的方式更紧密地对齐。

RGB - 所有三个颜色的值均为0到255,特定颜色由RG和B的组合定义。

HSL和HSV - 模型的颜色是我们正在寻找的色调,饱和度是我们有多少色调,亮度代表它的明暗度。

  • RGB(红色,绿色,蓝色)
  • XYZ(阈值超出饱和度)
  • HSL / HSV(色调,饱和度,明暗度)
  • LAB(明亮度, 从洋红色至绿色的范围 , 从黄色至蓝色的范围 )
  • LCH(明亮度,饱和度,色相)
  • YUV(明亮度,色度,饱和度)
  • YPbPr( 色差分量接口 )

2、在Opencv中读取和更改颜色空间

Opencv以BGR格式读取图像

import cv2import matplotlib.pyplot as pltimg = cv2.imread('puppy.jpg')plt.imshow(img)




opencv 电脑配置要求_opencv 电脑配置要求_04


opencv 电脑配置要求_opencv rgb yuv 硬件加速_05

BGR图像


img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)plt.imshow(img)


opencv 电脑配置要求_位图_06


opencv 电脑配置要求_有损压缩_07

RGB图像


img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)plt.imshow(img)


opencv 电脑配置要求_无损压缩_08


opencv 电脑配置要求_有损压缩_09

HSV图像


img = cv2.cvtColor(img, cv2.COLOR_BGR2HLS)plt.imshow(img)


opencv 电脑配置要求_opencv rgb yuv 硬件加速_10


opencv 电脑配置要求_opencv 电脑配置要求_11

HLS图像


3、使用Opencv混合2张图像

(1)混合两个大小相同的图像

img1 = cv2.imread('../DATA/dog_backpack.png')img2 = cv2.imread('../DATA/watermark_no_copy.png')img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)img1 =cv2.resize(img1,(1200,1200))img2 =cv2.resize(img2,(1200,1200))plt.imshow(img1)plt.imshow(img2)


opencv 电脑配置要求_opencv rgb yuv 硬件加速_12


opencv 电脑配置要求_opencv 电脑配置要求_13

图像1和图像2


blended = cv2.addWeighted(src1=img1,alpha=0.7,src2=img2,beta=0.3,gamma=0)plt.imshow(blended)


opencv 电脑配置要求_无损压缩_14


调整alpha,beta和gamma值!


opencv 电脑配置要求_opencv 电脑配置要求_15


(2)混合两个不同大小的图像

img1 = cv2.imread('../DATA/dog_backpack.png')img2 = cv2.imread('../DATA/watermark_no_copy.png')img2 =cv2.resize(img2,(600,600))img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)


opencv 电脑配置要求_opencv rgb yuv 硬件加速_16


图像1的形状为(1401,934,3),图像2的形状为(600,600,3)

为了混合不同尺寸的图像,你需要确定ROI(感兴趣区域),并且图像需要蒙版图像(黑色背景)

x_offset=934-600y_offset=1401-600# Creating an ROI of the same size of the foreground image (smaller image that will go on top)rows,cols,channels = img2.shape# roi = img1[0:rows, 0:cols ] # TOP LEFT CORNERroi = img1[y_offset:1401,x_offset:943] # BOTTOM RIGHT CORNER# Now create a mask of logo and create its inverse mask alsoimg2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)mask_inv = cv2.bitwise_not(img2gray) #this creates the image as B&W with black as backgroundplt.imshow(mask_inv,cmap='gray')


opencv 电脑配置要求_无损压缩_17


opencv 电脑配置要求_有损压缩_18


## Create the mask as 3 dimensional (RGB)white_background = np.full(img2.shape, 255, dtype=np.uint8)bk = cv2.bitwise_or(white_background, white_background, mask=mask_inv)fg = cv2.bitwise_or(img2, img2, mask=mask_inv)## put the original on the mask image to blendfinal_roi = cv2.bitwise_or(roi,fg)large_img = img1small_img = final_roilarge_img[y_offset:y_offset+small_img.shape[0], x_offset:x_offset+small_img.shape[1]] = small_imgplt.imshow(large_img)


opencv 电脑配置要求_位图_19


opencv 电脑配置要求_opencv 电脑配置要求_20


4、自适应阈值

Opencv在cv2.threshold中提供了各种阈值

让我们使用实时自适应阈值处理

img = cv2.imread("../DATA/crossword.jpg