OpenCV图像处理学习笔记-Day1

时间:2023-03-08 17:40:15

OpenCV图像处理学习笔记-Day1

目录

第1课:图像读入、显示和保存

1. 读入图像

retval = cv2.imread(文件名[,显示控制参数])
文件名:完整文件名
参数:
cv2.IMREAD_UNCHANGED
cv2.IMREAD_GRAYSCALE
cv2.IMREAD_COLOR

2. 显示图像

None = cv2.imshow(窗口名, 图像名)
范例:
cv2.imshow('demo', image) retval = cv2.waitKey( [,delay])
delay:
delay > 0 等待delay毫秒
delay < 0 等待键盘单击
delay = 0 无线等待 cv2.destroyAllWindows() # 销毁所有窗口

3. 保存图像

retval = cv2.imwrite(文件地址, 文件名)
范例:
cv2.imwrite('./image/A.jpg')

第2课:图像处理入门基础

1. 基本概念

图像是由像素构成的

图像分类:

  1. 二值图像
  2. 灰度图像
  3. RGB图像

OpenCV图像处理学习笔记-Day1

二值图像的像素点只能是0,1

灰度图像的像素点是0-255,0为纯黑,255为纯白,区间内都是灰色

RGB图像(3通道,在OpenCV为BGR)

OpenCV图像处理学习笔记-Day1

RGB图像的构成可以理解为三个灰度图像拼成一个RGB图像。

2. RGB转灰度

在实际项目中,通常需要将原始图像处理为灰度图像。为什么这么做呢?原始的彩色图像其一个像素点有三个值处理数据较为麻烦。而灰度图像每个像素点就只有一个值处理起来较为简单。转为灰度图像是否会丢失图像信息?不会!在转换过程中采取的算法采用加权操作,确保RGB三个颜色都保存在灰度图像中。

第3课:像素处理

1. 读取像素

返回值 = 图像(位置参数)

# 灰度图像,返回灰度值
范例:
p = img[88, 142]
print(p) # BGR图像,返回B,G,R的值
范例:
blue = img[78, 125, 0]
print(blue) green = img[78, 125, 1]
print(green) red = img[78, 125, 2]
print(red) p = img[78, 125]
print(p) # B, G, R

2. 修改像素

# 灰度图像(numpy数组操作)
范例:
print(img[88, 99])
img[88, 99] = 255
print(img[88, 99])

第4课:使用numpy进行像素操作

1. 读取像素

返回值 = 图像.item(位置参数)
灰度图像,返回灰度值。
BGR图像,返回值为BGR的值
范例:
p = img.item(78, 125)
print(p) blue = img.item(78, 125, 0)
green = img.item(78, 125, 1)
red = img.item(78, 125, 2)

2. 修改像素

灰度图像
范例:
img.itemset((88, 99), 255)
print(img.item(88, 99))
img.itemset((88, 99), 255)
print(img.item(88, 99)) BGR图像
范例:
img.itemset((88, 99, 0), 255)
img.itemset((88, 99, 1), 255)
img.itemset((88, 99, 2), 255)

第5课:获取图像属性

1. 形状:行、列、通道数

shape可以获取图像的形状,返回包含行数,列数,通道数的元组
灰度:返回行数、列数
彩色:返回行数、列数、通道数
范例:
import cv2
img1 = cv2.imread('灰度图像')
print(img1.shape) # (512, 512) import cv2
img2 = cv2.imread('彩色图像')
print(img2.shape) # (512,512,3)

2. 像素数目

size可以获取图像的像素数目。
灰度: 返回行数*列数
彩色: 返回行数*列数*通道数
范例:
import cv2
img = cv2.imread('图像名')
print(img.size) # 352353

3. 获取图像类型

dtype返回的是图像的数据类型
范例:
import cv2
img = cv2.imread('图像名称')
print(img.dtype) # uint8

第6课:图像ROI

1. ROI(region of interest),感兴趣区域

import cv2
img = cv2.imread('图像名称')
face = img[200:400, 200:400]

OpenCV图像处理学习笔记-Day1

import cv2
img = cv2.imread('图像名称')
face = img[200:400, 200:400]
img[200:400, 600:800] = face

OpenCV图像处理学习笔记-Day1

OpenCV图像处理学习笔记-Day1

OpenCV图像处理学习笔记-Day1

OpenCV图像处理学习笔记-Day1

第7课:通道的拆分与合并

1. 拆分通道

import cv2
img = cv2.imread('image_dir')
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
import cv2
img = cv2.imread('image_dir')
b, g, r = img.split(img) # 拆分通道
cv2.imshow('B', b)
cv2.imshow('G', g)
cv2.imshow('R', r)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. 合并通道

import cv2
img = cv2.imread('image_dir')
b, g, r = cv2.split(a)
m = cv2.merge([b, g, r]) # 合并通道
cv2.imshow('merge', m)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意:拆分的顺序与合并的顺序一定要相同,否则图片将要不正确

import cv2
img = cv2.imread('image_dir')
b, g, r = cv2.split(img)
bgr = cv2.merge([b, g, r])
rgb = cv2.merge([r, g, b]) # 产生错误图片
cv2.imshow('bgr', bgr)
cv2.imshow('rgb', rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()

OpenCV图像处理学习笔记-Day1

OpenCV图像处理学习笔记-Day1

OpenCV图像处理学习笔记-Day1

OpenCV图像处理学习笔记-Day1

第8课:图像加法

1. numpy加法

OpenCV图像处理学习笔记-Day1

OpenCV图像处理学习笔记-Day1

2. OpenCV加法

OpenCV图像处理学习笔记-Day1

OpenCV图像处理学习笔记-Day1

注意的问题

参与运算的图像大小、类型必须一致

3. 代码实例

import cv2

img = cv2.imread('image_dir')
img_ = img
result1 = img + img_
result2 = cv2.add(img, img_) cv2.imshow('original', img)
cv2.imshow('result1', result1)
cv2.imshow('result2', result2) cv2.waitKey(0)
cv2.destroyAllWindows()

第9课:图像融合

  • 将2张或2张以上的图像信息的融合到1张图像上
  • 融合的图像含有更多的信息、能够更方便人来观察或者计算机处理

1. 介绍

OpenCV图像处理学习笔记-Day1

图像加法

结果图像 = 图像1 + 图像2

img = img1 + img2

图像融合

结果图像 = 图像1 * 系数1 + 图像2 * 系数2 + 亮度调节量

img = img1 * 0.3 + img2 * 0.7 + 18

OpenCV图像处理学习笔记-Day1

OpenCV图像处理学习笔记-Day1

2. 代码实现

import cv2

img1 = cv2.imread('image_dir')
img2 = cv2.imread('image_dir') result = cv2.addWeighted(img1, 1, img2, 1, 0)
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('result', result) cv2.waitKey(0)
cv2.destroyAllWindows()

第10课:类型转换

OpenCV提供了200多种不同的类型转换。

cv2.COLOR_BGR2GRAY

cv2.COLOR_BGR2RGB

cv2.COLOR_GRAY2BGR

import cv2

img = cv2.imread('image_dir')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # BGR转灰度图
img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # BGR图像转RGB图像 cv2.imshow('lenaColor', img)
cv2.imshow('lenaGray', img_gray) cv2.waitKey(0)
cv2.destroyAllWindows()

第11课:图像缩放

1. 图像缩放-resize函数

语法格式

dst = cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

src:原始图像

dsize:缩放大小

b = cv2.resize(a, (122, 122))

fx, fy:缩放大小

b = cv2.resize(a, None, fx=0.5, fy=0.7)

注意dsize; fx, fy设置一个即可

import cv2

img = cv2.imread('image_dir')
rows, cols = img.shape[:2]
img_resized = cv2.resize(img, (200, 100)) # (col, row), (宽, 高)
# cv2.resize(img, (round(cols*0.5), round(rows*1.2))) # cv2.resize(img, None, fx=1.2, fy=0.5) # (row, col), (高, 宽) cv2.imshow('original', img)
cv2.imshow('resized', img_resized) cv2.waitKey(0)
cv2.destroyAllWindows()

第11课:图像翻转

1. 图像翻转-flip函数

语法

dst = cv2.flip(src, flipCode)

范例:

dst = cv2.flip(src, 1)

cv2.flip(a, 0)

OpenCV图像处理学习笔记-Day1

OpenCV图像处理学习笔记-Day1

OpenCV图像处理学习笔记-Day1