目录
005:图像色彩空间转换
5.1常见色彩空间:
5.2代码实现:
5.3 运行结果:
006:图像对象的创建与赋值
6.1图像对象属性
6.2OpenCV-Python支持的数据类型
6.3.numpy常用函数
6.4代码实现
6.4.1创建array数组
6.4.2创建纯色背景
6.4.3指定位置颜色
007.图像像素的读写操作
7.1图像像素
7.2像素遍历
7.3像素读写
7.3.1读写像素,彩色图像:
7.3.2读写像素,灰度图像:
7.4代码实现
008.图像算术操作
8.1算术操作
8.2代码实现
8.2.1加和代码演示
8.2.2Mask代码演示
005:图像色彩空间转换
人眼可见光区域:380-780
5.1常见色彩空间:
HSV RGB Ycrcb
色彩空 取值范围 优点 HSV H:0~180,SV:0~255 对计算机友好,区分各种色彩RGB 0~255(uint8) 设备独立, 计算机显示器的标准支持色彩系统Ycrcb 0~255 Y分量表示信息,CrCb可以被压缩 从一个色彩空间转换到另外一个色彩空间信息传递与损失过程可逆与不可逆5.2代码实现:
image = cv.imread("F:\Python\OpenCV\data\lena.jpg") cv.imshow("lena",image) hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV) ycrcb = cv.cvtColor(image,cv.COLOR_BGR2YCrCb) cv.imshow("hsv",hsv) cv.imshow("ycrcb",ycrcb) cv.waitKey(0) cv.destroyAllWindows()
5.3 运行结果:
006:图像对象的创建与赋值
6.1图像对象属性
• 图像宽高 image.shape• 图像深度 image• 图像数据类型 image.dtype• 图像通道 image.shape6.2OpenCV-Python支持的数据类型
np.uint8
np.float32
np.int32
np.int64
6.3.numpy常用函数
numpy.array 创建一个array型的数组
numpy.zeros 创建一个指定大小全零的数组
numpy.zeros_like 创建一个与指定array大小相同的全零数组
numpy.asarray 把非array类型的数组转换为array型
numpy.copy 复制一个数组
numpy.reshape 把数组reshape为指定大小的数组
6.4代码实现
6.4.1创建array数组
m1 = np.array([[2,3],[4,5]],dtype=np.uint8) print(m1) m2 = np.ones((4,4,3),dtype=np.uint8) print(m2) m2[:] = (255,0,0) print(m2) m3 = np.zeros((4,4,3),dtype=np.uint8) print(m3)
6.4.2创建纯色背景
image = np.zeros((512,512,3),dtype=np.uint8) image[:] = (255,0,0) # 纯蓝色图片 cv.imshow('image1',image) image[:] = (0,255,0) # 纯绿色图片 cv.imshow('image2',image) image[:] = (0,0,255) # 纯红色图片 cv.imshow('image3',image)
运行结果
6.4.3指定位置颜色
image[0:255] = (0,0,255) # 上半部分红色 image[256:512] = (0,0,0) # 上半部分黑色 cv.imshow('image4',image) image[:,0:255,:] = (0,0,255) # 左半部分红色 image[:,256:512,:] = (0,0,0) # 右半部分黑色 cv.imshow('image5',image) cv.waitKey(0) cv.destroyAllWindows()
运行结果
007.图像像素的读写操作
7.1图像像素
100万像素相当于1024x868的分辨率
7.2像素遍历
灰色图像素排列
彩色图像素排列
像素遍历本质就是numpy数组访问
假设变量image
获取图像维度信息: image.shape
图像访问像素: image[row, col]
图像赋值像素: image[row, col] = (b,g,r)
7.3像素读写
7.3.1读写像素,彩色图像:
b, g, r = image[row, col ]image[row, col ] = (255-b, 255-g, 255-r)7.3.2读写像素,灰度图像:
pv = image[row, col ]image[row, col ] = 255-pv7.4代码实现
image = cv.imread("F:\Python\OpenCV\data\lena.jpg") cv.imshow("lena", image) h, w, c = image.shape # 512x512x3 for row in range(h): for col in range(w): b,g,r = image[row, col] image[row, col] = (255-b,255-g,255-r) cv.imshow("visited",image) cv.waitKey(0) cv.destroyAllWindows()
运行结果
008.图像算术操作
8.1算术操作
加法 cv.add(src1, src2[, dst [, mask[, dtype ]]]) -> dst减法 cv.subtract (src1,src2[, dst [,mask[, dtype ]]])-> dst乘法 cv.multiply (src1,src2[, dst [,scale[, dtype ]]])-> dst除法 cv.divide (src1, src2[, dst [, scale[, dtype ]]])-> dstsrc1 & src2 表示图像加法,保证不越界: saturate(src1 + src2)-》0~255注意: mask参数:遮掩指定位置,然后对未遮掩位置进行算术运算。例如:cv.add (src1, src2[, dst [, mask[, dtype ]]]) -> dst8.2代码实现
8.2.1加和代码演示
# 将原始图像与洋红色图片进行加和 image1 = cv.imread('F:\Python\OpenCV\data\girl.jpg') image2 = np.zeros_like(image1) image2[:,:] = (110,0,250) cv.imshow("img1",image1) cv.imshow("img2",image2) added = cv.add(image1,image2) cv.imshow("added",added) cv.waitKey(0) cv.destroyAllWindows()
运行结果
8.2.2Mask代码演示
m1 = np.array([[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]],dtype=np.uint8) m2 = np.array([[4,4,4,4],[5,5,5,5],[4,4,4,4],[5,5,5,5]],dtype=np.uint8) mask = np.zeros((4,4),dtype=np.uint8) mask[1:3,1:3] = 1 print("m1:\n",m1) print("m2:\n",m2) print("mask:\n",mask) dst1 = cv.add(m1,m2,mask=mask) dst2 = cv.add(m1,m2) print("dst1:\n",dst1) print("dst2:\n",dst2)
可以对比出mask和没有进行mask的结果是不同的
图片示例:
image1 = cv.imread('F:\Python\OpenCV\data\girl.jpg') h,w,c = image1.shape image2 = np.zeros_like(image1) image2[:,:] = (110,0,250) mask = np.zeros((h,w),dtype=np.uint8) mask[100:400,100:400]=1 cv.imshow("img1",image1) cv.imshow("img2",image2) added = cv.add(image1,image2,mask=mask) cv.imshow("added",added) cv.waitKey(0) cv.destroyAllWindows()
第二节课的内容总结完毕!