一、图像的读取、显示和保存
1. 读取图像
retval = cv2.imread(文件名, 显示控制参数)
使用示例:
import cv2
img = cv2.imread("C:\\Users\\92039\\Desktop\\xiangmu\\test.png")# 两个反斜杠,第一个反斜杠用于转义字符
2. 显示图像
None = cv2.imshow(窗口名, 图像名)
示例:
import cv2
img = cv2.imread('girl.jpg')
cv2.imshow("demo", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
retval = cv2.waitKey( |, delay|)
delay:
delay > 0, 等待 delay 毫秒
delay < 0,等待键盘单击
delay=0,无限等待
cv2.destroyAllWindows() # 删除所有窗口
3. 保存图像
retval = cv2.imwrite(文件地址, 文件名)
示例:
import cv2
img = cv2.imread('girl.jpg')
cv2.imshow("demo", img)
cv2.imwrite('girl_1.jpg', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
在源目录下生成一个 girl_1.jpg 图像
二、图像概念基础入门
图像是由一个个像素点构成的。一般而言,相机的像素越高,像素点就更加细腻,看起来就更加的清晰
图像分类
二值图像的像素点只有两个值(0或1)
灰度图像有两个通道,像素值范围 0~255
RGB 图像有三个通道,由红绿蓝三原色构成。我们在小学时候,老师应该就教过这些概念,用不同程度的三原色颜料可以汇出任意一种已知的颜色。
在 opencv 中图像读取之后,通道是按照 RGB 排列的,和 matlab 中有点区别,在 opencv 中可以进行通道转换,在后面章节中会进行介绍。
在 opencv 中可以进行 RGB 转灰度,灰度图像转化为二值图像
三、读取像素
1. 读取图像
返回值 = 图像(位置参数)
灰度图像,返回灰度值
读取灰度值范例:
p = img[88, 142]
print(p)
RGB 图像,返回值为 B,G,R 的值。
对于三通道图,读取像素点示例:
blue = img[78, 125, 0]
print(blue)
green = img[78, 125, 1]
print(green)
red = img[78, 125, 2]
print(red)
其中 0 ,1 ,2 表示对应通道
如果不指定通道数:
p = img[78, 125]
print(p)
输出结果有三个值,分别对应 B、G、R 三通道
2. 修改像素值
灰度图像
示例:
print(img[78, 125])
img[78, 125] = 255
print(img[78, 125])
BGR 图像
示例:
print(img[78, 125])
img[78, 125] = [255, 255, 255]
print(img[78, 125])
结果如下:
四、使用 numpy 进行图像处理
- 读取像素
返回值 = 图像.item(位置参数)
灰度图像,返回灰度值。
示例:
p = img.item(88, 142)
print(p)
BGR 图像,返回值为B,G,R 的值。
示例:
blue = img.item(78, 125, 0) green = img.item(78, 125, 1) red = img.item(78, 125, 2) print(blue) print(green) print(red)
import cv2
img = cv2.imread('girl.jpg')
p = img.item(88, 142, 1)
print(p)
cv2.waitKey(0)
cv2.destroyAllWindows()
>>>41
修改像素值
灰度图像
示例:
img.itemset((88, 99), 255)
import cv2
img = cv2.imread('girl.jpg', 0)
print(img.item((88, 99)))
img.itemset((88, 99), 255)
print(img.item((88, 99)))
#cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
>>> 149
>>> 255BGR 图像
示例:
img.itemset((88, 99, 0), 255)
img.itemset((88, 99, 1), 255)
img.itemset((88, 99, 2), 255)
import cv2
import numpy as np
img = cv2.imread('girl.jpg', 1)
print(img.item((88, 99, 0)))
print(img.item((88, 99, 1)))
print(img.item((88, 99, 2)))
img.itemset((88, 99, 0), 255)
img.itemset((88, 99, 1), 255)
img.itemset((88, 99, 2), 255)
print(img.item((88, 99, 0)))
print(img.item((88, 99, 1)))
print(img.item((88, 99, 2)))
#cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()