一、图像读取
retval = cv2.imread(filename[, flags])
- filename:需要读取的图片路径名,支持多种图片格式,如JPEG、PNG、TIFF等。
- flags :一个可选参数,指定加载图像的颜色类型。常用的值包括:
- cv2.IMGEAD_ANYDEPTH:其值是2。若载入的图像深度为16位或32位,就返回对应深度的图像,否则转换为8位图像再返回。
cv2.IMREAD_COLOR
:其值取1。以彩色模式加载图像,这是默认值。任何图像的透明度都会被忽略(这是默认标志)。cv2.IMREAD_GRAYSCALE
:其值取0。以灰度模式加载图像。cv2.IMREAD_UNCHANGED
:其值取-1。不加改变的载入原图,包括alpha通道。
注意事项:
1、imread文件路径除了不支持单右斜线形式(\),其他斜线形式都支持
2、imread文件路径不支持中文路径,如果要自持中文路径,可使用以下代码:
img = cv2.imdecode(np.fromfile(imgpath, dtype=np.unit8), -1)
二、 图像属性
- img.shape[0]读取图像行数
- img.shape[1]读取图像列数
- img.shape[2]读取图像通道数
- img.shape[:2]只读取图像行数和列数
三、图像保存
cv2.imwrite(filename, img[, params])
- filename :
- 类型:字符串
- 说明:要保存的图像文件名,包括文件路径和文件扩展名(如
.jpg
、.png
等)。文件路径可以是相对路径或绝对路径。文件扩展名决定了保存的图像格式。 - 注意:在 Python 3 中,
cv2.imwrite()
不支持中文和空格作为文件名(直接使用时可能会遇到问题),如果需要使用中文或特殊字符,可以考虑对文件名进行编码处理或使用其他库(如imageio
)来保存图像。
- img :
- 类型:通常是一个二维或三维的 NumPy 数组,表示图像数据。
- 说明:要保存的图像数据。这个数组可以是灰度图像(二维数组)或彩色图像(三维数组,通常具有三个颜色通道,如 RGB 或 BGR)。
- params (可选):
- 类型:可选参数,通常是一个包含键值对的字典,用于指定保存图像时的特定参数。
- 说明:
- 压缩质量 :对于某些格式(如 JPEG),可以指定压缩质量。例如,使用
cv2.IMWRITE_JPEG_QUALITY
作为键,后跟一个整数值(范围从 0 到 100)作为压缩质量。 - 压缩级别 :对于 PNG 格式,可以指定压缩级别(从 0 到 9)。例如,使用
cv2.IMWRITE_PNG_COMPRESSION
作为键,后跟一个整数值作为压缩级别。 - 其他参数:根据 OpenCV 的不同版本和支持的格式,可能还有其他可用的参数。具体参数列表和用法应参考 OpenCV 的官方文档。
- 压缩质量 :对于某些格式(如 JPEG),可以指定压缩质量。例如,使用
四、图像显示
def cv_show(name, img):
cv2.imshow(name, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
五、单窗口多图像显示
image = cv2.imread('img\\1.png')
cv_show("img", image)
image_cut1 = image[0:500, 0:500]
image_cut2 = image[500:1000, 500:1000]
hstack_image = np.hstack([image_cut1, image_cut2])
cv_show("hstack_image", hstack_image)
- 使用np.hstack()函数拼接图像,使用时图像的形状要一致。此时图像水平拼接。
- 使用np.vstack()函数图像会竖直拼接。
六、鼠标事件(了解)
img = np.full((500, 500), 0)
img = cv2.convertScaleAbs(img)
def draw_circle(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
cv2.circle(img, (x, y), 50, (255, 255, 255), -1)
cv2.namedWindow('img')
cv2.setMouseCallback('img', draw_circle)
while 1:
cv2.imshow('img', img)
n = cv2.waitKey(5)
if n == ord('q'):
break
elif n == ord('s'):
cv2.imwrite('res.jpg', img)
print('保存成功')
cv2.destroyAllWindows()
鼠标事件event有以下:
- 鼠标移动(EVENT_MOUSEMOVE):当鼠标在窗口内移动时触发。
- 左键按下(EVENT_LBUTTONDOWN):当鼠标左键被按下时触发。
- 左键释放(EVENT_LBUTTONUP):当鼠标左键被释放时触发。
- 左键双击(EVENT_LBUTTONDBLCLK):当鼠标左键被快速双击时触发。
- 右键按下(EVENT_RBUTTONDOWN) 、右键释放(EVENT_RBUTTONUP) 、右键双击(EVENT_RBUTTONDBLCLK):与左键类似,但对应的是鼠标右键。
- 中键按下(EVENT_MBUTTONDOWN) 、中键释放(EVENT_MBUTTONUP) 、中键双击(EVENT_MBUTTONDBLCLK):与左键和右键类似,但对应的是鼠标中键(如果有的话)。
- 滚轮滑动(EVENT_MOUSEWHEEL、EVENT_MOUSEHWHEEL):当鼠标滚轮被滚动时触发,EVENT_MOUSEWHEEL对应垂直滚动,EVENT_MOUSEHWHEEL对应水平滚动。
鼠标事件标志flags有以下:
Flags常量 | 含义 |
---|---|
cv2.EVENT_FLAG_LBUTTON | 左键被按下或拖拽时设置 |
cv2.EVENT_FLAG_RBUTTON | 右键被按下或拖拽时设置 |
cv2.EVENT_FLAG_MBUTTON | 中键(滚轮按钮)被按下或拖拽时设置 |
cv2.EVENT_FLAG_CTRLKEY | Ctrl键被按下时设置 |
cv2.EVENT_FLAG_SHIFTKEY | Shift键被按下时设置 |
cv2.EVENT_FLAG_ALTKEY | Alt键被按下时设置 |