(一) Open CV 图像基础操作 — Python实现
Open CV默认图片通道顺序是BGR,而不是RGB。
1 引入 CV
import cv2 as cv
1.1 图像 读取
实现功能:
从文件夹中读取一张图片
代码示例:
# eg:
img = cv.imread(r'../CV-images/birds.jpg', -1)
cv.imshow('img_1', img)
cv.waitKey(0)
cv.destroyAllWindows()
代码效果
代码解析:
imread(img_path,flag) 读取图片,返回图片对象
- img_path: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为None
- flag:cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入 1,cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入 0,cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入 -1
imshow(window_name,img):显示图片,窗口自适应图片大小
- window_name: 指定窗口的名字
- img:显示的图片对象
waitKey(millseconds) 键盘绑定事件,阻塞监听键盘按键,返回一个数字(不同按键对应的数字不同)
- millseconds: 传入时间毫秒数,在该时间内等待键盘事件;传入0时,会一直等待键盘事件
destroyAllWindows(window_name)
- window_name: 需要关闭的窗口名字,不传入时关闭所有窗口
1.2 图像写入
实现功能:
将一个彩色图像转换为灰度图像 并保存到文件夹中
代码示例:
img1 = cv.imread(r'../CV-images/birds.jpg')
# 图像灰度转换 将彩色图像(三通道 BGR)转化为灰度图像(单通道图像)
img_gray = cv.cvtColor(img1, cv.COLOR_BGR2GRAY)
# 图像降噪处理
ret, img_threshold = cv.threshold(img_gray, 127, 255, cv.THRESH_BINARY)
# 显示原始图片
cv.imshow('img1', img1)
# 显示 转换后的图片
cv.imshow('thre', img_threshold)
#等待 键盘输入
key = cv.waitKey(0)
# Esc键 key = 27
if key == 27:
print(key)
cv.destroyAllWindows()
# 图像写入
cv.imwrite(r'./images/thre.jpg', img_threshold)
代码效果:
代码解析:
cv.cvtColor(img1, cv.COLOR_BGR2GRAY)
图像颜色空间转换:BGR —> Gray 彩色到灰色(黑白) ,Gray—> BGR 灰度(黑白)—>彩色
在 OpenCV 中有超过 150 种进行颜色空间转换的方法。但是我们经常用到的也就两种: BGR<–>Gray 和 BGR<–>HSV。要用到的函数是: cv2.cvtColor(input_image,flag),其中 flag就是转换类型。
对于 BGR->Gray 的转换,我们要使用的 flag 就是 cv2.COLOR_BGR2GRAY。
同样对于 BGR->HSV 的转换,我们用的 flag 就是 cv2.COLOR_BGR2HSV。
cv.threshold(img, threshold, maxval,type)
函数 cv.threshold 对单通道数组应用固定阈值操作。
- img 指输入图像
- threshold是设定的阈值
- maxval是当灰度值大于(或小于)阈值时将该灰度值赋成的值
- type规定的是当前二值化的方式
这里有一篇博客关于thresholdhan函数二值化处理写的非常详细大家可以点击了解一下 >>threshold 函数详细用法
cv.imwrite(img_path_name,img)
图像写入函数
- i mg_path_name:文件写入路径
- img:文件对象
1.3 图像像素获取和编辑
实现功能:
获取,编辑图片中某一位置像素
代码示例:
img = cv.imread(r'../CV-images/birds.jpg')
# 获取和设置
pixel = img[100,100] # 获取(100,100)处的像素值 彩色图像为RGB 三层叠加 所以有三个像素值
print(pixel)
img[100,100] = [57,63,99]
b = img[100,100,0]
g = img[100,100,1]
r = img[100,100,2]
img[100,100,2] = 99 # 设置R通道值
print(b,g,r)
# 利用函数获取和设置
pixel = img.item(100,100,2)
img.itemset((100,100,2),98)
print(pixel)
print(img[100,100,2])
代码效果:
out:
[242 236 193]
57 63 99
99
98
1.4获取图像格式
实现功能:
获取图片中某一位置像素
代码示例
import cv2 as cv
img = cv.imread(r'../CV-images/birds.jpg')
# 图片形状
print(img.shape)
# 图片大小
print(img.size)
# 图片格式
print(img.dtype)
代码效果
out:
(450, 600, 3)
810000
uint8
1.5 ROI截取
实现功能
实现图像截取,复制
代码示例:
import cv2 as cv
img = cv.imread(r'../CV-images/birds.jpg',-1)
part = img[200:450,0:200]
img[0:250,0:200] = part
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()
代码效果
文中图片资源下载:右键点击 另存为