机器视觉OpenCV:OpenCV图像基本操作

一、图像读写操作

(一)读取图像

方法:

cv2.imread(filename, flags=None)

参数说明:

filename (字符串):

   - 必须参数。

   - 指定要读取的图像文件的路径。可以是相对路径或绝对路径。

   - 支持多种图像格式,如 .jpg, .png, .bmp, .tiff, .jpeg 等。

flags (整数):

   - 可选参数。

   - 指定读取图像的方式。不同的标志位会影响图像的加载方式。

   - 常见的标志位包括:

     - cv2.IMREAD_COLOR (默认值):加载彩色图像。任何透明度都将被忽略。这是默认标志。

     - cv2.IMREAD_GRAYSCALE:以灰度模式加载图像。

     - cv2.IMREAD_UNCHANGED:加载图像,包括 alpha 通道(如果有)。

     - cv2.IMREAD_ANYCOLOR:根据图像内容选择最合适的色彩模式。

     - cv2.IMREAD_ANYDEPTH:保留图像的深度信息(例如 16 位图像)。

     - cv2.IMREAD_REDUCED_COLOR_2、cv2.IMREAD_REDUCED_COLOR_4、cv2.IMREAD_REDUCED_COLOR_8:分别将图像尺寸缩小为原来的一半、四分之一、八分之一。

     - cv2.IMREAD_REDUCED_GRAYSCALE_2、cv2.IMREAD_REDUCED_GRAYSCALE_4、cv2.IMREAD_REDUCED_GRAYSCALE_8:分别将图像尺寸缩小为原来的一半、四分之一、八分之一,并以灰度模式加载。

返回值:

- 返回一个 NumPy 数组,表示图像的像素值。

- 如果图像文件不存在或无法读取,返回 None。

示例:

1. 默认加载彩色图像

import cv2

 读取图像

image = cv2.imread('path/to/your/image.jpg')

 检查图像是否成功读取

if image is None:

    print("Error: Could not read image.")

else:

    print("Image successfully read.")

2. 加载灰度图像

import cv2

读取灰度图像

gray_image = cv2.imread('path/to/your/image.jpg', cv2.IMREAD_GRAYSCALE)

 检查图像是否成功读取

if gray_image is None:

    print("Error: Could not read image.")

else:

    print("Gray image successfully read.")

3. 加载包含 alpha 通道的图像

import cv2

读取包含 alpha 通道的图像

image_with_alpha = cv2.imread('path/to/your/image.png', cv2.IMREAD_UNCHANGED)

检查图像是否成功读取

if image_with_alpha is None:

    print("Error: Could not read image.")

else:

    print("Image with alpha channel successfully read.")

名词解释:

Alpha 通道是图像中的一个额外通道,用于表示透明度信息。通常,图像有三个颜色通道(红、绿、蓝,即 RGB),而带有 Alpha 通道的图像则有四个通道(红、绿、蓝、Alpha,即 RGBA)。Alpha 通道的值范围通常是 0 到 255,其中:

- 0 表示完全透明。

- 255 表示完全不透明。

- 中间值 表示不同程度的半透明。

 Alpha 通道的应用场景:

图像合成:在图像合成中,Alpha 通道可以帮助将一个图像无缝地叠加到另一个背景上。

UI 设计:在用户界面设计中,Alpha 通道用于创建透明或半透明的按钮、图标等元素。

游戏开发:在游戏开发中,Alpha 通道用于创建透明或半透明的游戏对象,如粒子效果、烟雾等。

视频编辑:在视频编辑中,Alpha 通道用于实现复杂的视频合成效果。

 4. 缩小图像并加载

import cv2

 读取并缩小图像

reduced_image = cv2.imread('path/to/your/image.jpg', cv2.IMREAD_REDUCED_COLOR_2)

 检查图像是否成功读取

if reduced_image is None:

    print("Error: Could not read image.")

else:

    print("Reduced image successfully read.")

(二)显示图像

cv2.imshow() 函数用于在一个窗口中显示图像。它的基本语法如下:

python

cv2.imshow(window_name, image)

 参数说明

window_name (字符串):

   - 窗口的名称。这个名称必须是唯一的,因为每个窗口都有一个唯一的名称。

   - 例如:'Image Window'。

image (NumPy 数组):

   - 要显示的图像。图像通常是一个三维数组(BGR 格式)或二维数组(灰度格式)。

   - 例如:image = cv2.imread('path/to/your/image.jpg')。

 示例代码

下面是一个简单的示例,展示如何使用 cv2.imshow() 显示图像:

import cv2

 读取图像

image = cv2.imread('path/to/your/image.jpg')

 检查图像是否成功读取

if image is None:

    print("Error: Could not read image.")

else:

    print("Image successfully read.")

     显示图像

    cv2.imshow('Image Window', image)

     等待用户按键,0 表示无限等待

    cv2.waitKey(0)

     关闭所有 OpenCV 窦口

    cv2.destroyAllWindows()

 常见注意事项

1. 窗口管理:

   - 使用 cv2.namedWindow() 可以创建一个窗口,并设置窗口的属性。例如,可以设置窗口是否可以调整大小。

   - 例如:

    cv2.namedWindow('Image Window', cv2.WINDOW_NORMAL)   创建一个可调整大小的窗口

     

2. 等待用户输入:

   - cv2.waitKey(0) 会暂停程序,直到用户按下任意键。0 表示无限等待。

   - 如果你需要等待特定的时间(毫秒),可以传入一个正整数。例如,cv2.waitKey(3000) 会等待 3 秒钟。

   - 例如:

      cv2.imshow('Image Window', image)

     cv2.waitKey(3000)   等待 3 秒钟

     

3. 关闭窗口:

   - 使用 cv2.destroyAllWindows() 可以关闭所有打开的窗口。

   - 使用 cv2.destroyWindow(window_name) 可以关闭指定名称的窗口。

   - 例如:

     

     cv2.imshow('Image Window', image)

     cv2.waitKey(0)

     cv2.destroyWindow('Image Window')   关闭特定窗口

     

 高级用法

1. 显示多张图像:

   - 你可以在同一个程序中显示多张图像,只需为每张图像创建一个不同的窗口。

   - 例如:

     

     import cv2

      读取图像

     image1 = cv2.imread('path/to/your/image1.jpg')

     image2 = cv2.imread('path/to/your/image2.jpg')

     if image1 is None or image2 is None:

         print("Error: Could not read one or more images.")

     else:

         print("Images successfully read.")

          显示第一张图像

         cv2.imshow('Image 1', image1)

          显示第二张图像

         cv2.imshow('Image 2', image2)

          等待用户按键

         cv2.waitKey(0)

          关闭所有窗口

         cv2.destroyAllWindows()

     

2. 动态更新图像:

   - 在某些情况下,你可能需要在同一个窗口中动态更新图像。这可以通过在一个循环中多次调用 cv2.imshow() 实现。

   - 例如:

    

     import cv2

     import numpy as np

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字化与智能化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值