openCV(二)基础操作

1 图像色彩空间转换

常见的色彩空间有HSV、RGB和YCrCb三种:
openCV(二)基础操作_第1张图片
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()

openCV(二)基础操作_第2张图片openCV(二)基础操作_第3张图片openCV(二)基础操作_第4张图片

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

openCV(二)基础操作_第5张图片openCV(二)基础操作_第6张图片

3 图像像素的读写操作

像素是组成图像的小方格,单位面积像素越多分辨率越高。像素的实际大小为 d p i × i n c h e s = 像 素 总 数 dpi\times inches=像素总数 dpi×inches=
灰度图像像素值排序:
openCV(二)基础操作_第7张图片
彩色图像像素值排序:
在这里插入图片描述
像素值的读取方式为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()

openCV(二)基础操作_第8张图片 openCV(二)基础操作_第9张图片

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的非零区域进行。
openCV(二)基础操作_第10张图片

演示示例:

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

openCV(二)基础操作_第11张图片openCV(二)基础操作_第12张图片openCV(二)基础操作_第13张图片

【参考】DataWhale OpenCV课程

你可能感兴趣的:(计算机视觉,opencv,计算机视觉,python)