OpenCV||超细节的基本操作

一、图像读取

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])
  1. filename
    • 类型:字符串
    • 说明:要保存的图像文件名,包括文件路径和文件扩展名(如 .jpg.png 等)。文件路径可以是相对路径或绝对路径。文件扩展名决定了保存的图像格式。
    • 注意:在 Python 3 中,cv2.imwrite() 不支持中文和空格作为文件名(直接使用时可能会遇到问题),如果需要使用中文或特殊字符,可以考虑对文件名进行编码处理或使用其他库(如 imageio)来保存图像。
  2. img
    • 类型:通常是一个二维或三维的 NumPy 数组,表示图像数据。
    • 说明:要保存的图像数据。这个数组可以是灰度图像(二维数组)或彩色图像(三维数组,通常具有三个颜色通道,如 RGB 或 BGR)。
  3. params (可选):
    • 类型:可选参数,通常是一个包含键值对的字典,用于指定保存图像时的特定参数。
    • 说明:
      • 压缩质量 :对于某些格式(如 JPEG),可以指定压缩质量。例如,使用 cv2.IMWRITE_JPEG_QUALITY 作为键,后跟一个整数值(范围从 0 到 100)作为压缩质量。
      • 压缩级别 :对于 PNG 格式,可以指定压缩级别(从 0 到 9)。例如,使用 cv2.IMWRITE_PNG_COMPRESSION 作为键,后跟一个整数值作为压缩级别。
      • 其他参数:根据 OpenCV 的不同版本和支持的格式,可能还有其他可用的参数。具体参数列表和用法应参考 OpenCV 的官方文档。

四、图像显示

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有以下:

  1. 鼠标移动(EVENT_MOUSEMOVE):当鼠标在窗口内移动时触发。
  2. 左键按下(EVENT_LBUTTONDOWN):当鼠标左键被按下时触发。
  3. 左键释放(EVENT_LBUTTONUP):当鼠标左键被释放时触发。
  4. 左键双击(EVENT_LBUTTONDBLCLK):当鼠标左键被快速双击时触发。
  5. 右键按下(EVENT_RBUTTONDOWN)右键释放(EVENT_RBUTTONUP)右键双击(EVENT_RBUTTONDBLCLK):与左键类似,但对应的是鼠标右键。
  6. 中键按下(EVENT_MBUTTONDOWN)中键释放(EVENT_MBUTTONUP)中键双击(EVENT_MBUTTONDBLCLK):与左键和右键类似,但对应的是鼠标中键(如果有的话)。
  7. 滚轮滑动(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键被按下时设置

七、滑动条事件(不做讲解)

链接跳转:

章节二、OpenCV||超简略的Numpy小tip

章节三、OpenCV||超详细的图像处理模块

章节四、OpenCV||超详细的灰度变换和直方图修正

章节五、OpenCV||超详细的图像平滑

章节六、OpenCV||超详细的几何变换

相关推荐
Captain823Jack24 分钟前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
被制作时长两年半的个人练习生24 分钟前
【AscendC】ReduceSum中指定workLocal大小时如何计算
人工智能·算子开发·ascendc
Captain823Jack1 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
Black_mario1 小时前
链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 应用场景
网络·人工智能·web3
Aileen_0v02 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
数信云 DCloud2 小时前
实力认可 | 通付盾入选《ISC.AI 2024创新能力全景图谱》五项领域
人工智能
itwangyang5202 小时前
AIDD - 从机器学习到深度学习:蛋白质-配体对接评分函数的进展
人工智能·深度学习·机器学习
jerry2011082 小时前
机器学习常用术语
人工智能·机器学习
电报号dapp1192 小时前
比特币市场震荡:回调背后的机遇与挑战
人工智能·去中心化·区块链·智能合约
AI_NEW_COME2 小时前
构建全方位大健康零售帮助中心:提升服务与体验
大数据·人工智能