openCV(二)基础操作

1 图像色彩空间转换

常见的色彩空间有HSV、RGB和YCrCb三种:
在这里插入图片描述
RGB的色彩空间是设备独立的,不受设备不同的影响,取值范围在0-255。HSV色彩空间对计算机友好,H取值0-180,SV取值0-255。YCrCb色彩空间,Y表示信息,CrCb可以被压缩。
图像从一个色彩空间之间可以变换,但是可能存在如下问题:

  • 是否可以从一个色彩空间转换到另一个色彩空间
  • 是否存在信息传递和损失
  • 这一过程是否可逆

OpenCV中色彩空间变换的函数为cv.cvtColor(src,code[, dst[, dstCn]]) -> dst,其中src为输入图像,类型可以为uint8float32。code的表示类型有cv::COLOR_BGR2RGB=4cv::COLOR_BGR2GRAY=6cv::COLOR_GRAY2BGR=8cv::COLOR_BGR2HSV=40

演示示例:

image = cv.imread("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()

在这里插入图片描述在这里插入图片描述在这里插入图片描述

2 图像对象的创建与赋值

opencv中图像对象是一个ndarray,支持的数据类型:np.uint8np.float32np.int32np.int64。创建图像对象即创建一个numpy数组,np.zeros可以创建一个全黑图像,np.ones可以创建一个像素值全为1的图像,对于RBG图像,数值范围在0-255。

演示示例:

m1 = np.ones((256, 256, 3))
cv.imshow("m1", m1)
 m2 = np.ones((256, 256, 3))
 m2[:128] = (255, 0, 0)
 cv.imshow("m2", m2)
 cv.waitKey(0)
 cv.destroyAllWindows()

在这里插入图片描述在这里插入图片描述

3 图像像素的读写操作

像素是组成图像的小方格,单位面积像素越多分辨率越高。像素的实际大小为 d p i × i n c h e s = 像素总数 dpi\times inches=像素总数 dpi×inches=像素总数
灰度图像像素值排序:
在这里插入图片描述
彩色图像像素值排序:
在这里插入图片描述
像素值的读取方式为b, g, r = image[row, col],像素写方式为image[row, col] = (255, 0, 0)

演示示例:

image = cv.imread("lena.jpg")
cv.imshow("lena", image)
h, w, c = image.shape
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()

在这里插入图片描述 在这里插入图片描述

4 图像算术运算

OpenCV支持四种图像的算术操作

  • 加: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

加法函数可以保证图像不越界,即数值在0-255,使用saturate
mask可以使得加减法只在mask的非零区域进行。
在这里插入图片描述

演示示例:

image = cv.imread("lena.jpg")
cv.imshow("lena", image)
 m1 = np.zeros_like(image)
 m1[:128] = (255, 0, 0)
 cv.imshow("m1", m1)
 sub1 = cv.add(image, m1)
 cv.imshow("add", sub1)
 
 cv.waitKey(0)
 cv.destroyAllWindows()

在这里插入图片描述在这里插入图片描述在这里插入图片描述

5 图像的复制

可以通过img.copy()赋值原有图像,例如

img = cv.imread("lena.jpg")
copyImg = img.copy()

6 图像的保存

热TV阿里= cv.imwrite(filename,img,[,params])

  • filename是要存储文件的路径
  • img是要保存的图像矩阵
  • params表示特定保存格式的参数编码,默认为空。

【参考】DataWhale OpenCV课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值