openCV-Task02:005-008 图像色彩空间转换;图像对象的创建与赋值;图像像素的读写操作;图像算术操作

目录

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

色彩空取值范围优点
HSVH:0~180,SV:0~255
对计算机友好,区分各种色彩
RGB0~255(uint8)
设备独立, 计算机显示器的标准支持色彩系统
Ycrcb0~255Y分量表示信息,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(h,w,c)
图像数据类型 image.dtype

6.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-pv

7.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 ]]])-> dst
src1 & src2 表示图像
加法,保证不越界: saturate(src1 + src2)-》0~255
注意: mask参数:遮掩指定位置,然后对未遮掩位置进行算术运算。
例如:cv.add (src1, src2[, dst [, mask[, dtype ]]]) -> dst

8.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()

 运行结果为:

 第二节课的内容总结完毕!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值