OpenCV基础篇之像素访问

Last edited time
Sep 23, 2024 03:04 PM
AI summary
本文介绍了OpenCV中像素访问的基础,包括基于元素指针和行指针的两种访问方式。通过示例代码展示了如何反转图像和进行幂次变换以增强图像,强调了使用Mat.data和ptr方法访问像素数据的有效性。
Tags
Pixel Access
Image Processing
OpenCV Basics
Last edited by

程序及分析

  1. 基于元素指针的像素访问:根据Mat的数据结构,按理我们可以通过Mat.data访问像素数据的指针,再根据指针访问到像素数据,这是最直接的方法,一般图片数据在内存中都是连续存储(一般应该使用is_continues()进行判断,注意上面程序中没有,因为大部分情况是连续存储的,所以没有考虑),这种访问像素方式的一般格式是:
    1. 上面程序通过元素指针的方法给出了一个幂次变换的例子:
      幂次变换是一种很好用的图像增强的方法,我的Github上还有一个Matlab写的用幂次变换处理外出爬山风景照片的例子(https://github.com/xiahouzuoxin/zx_photo)
  1. 基于行指针的访问:OpenCV中定义了一个ptr方法,是一个模板:
    1. 通过ptr(i)直接获得Mat对象的第i行的指针,跟二维数组的行指针有些类似,继而可以通过ptr(i)[j]得到第i行第j列的像素值。
      上面程序给出了使用行指针进行图像反转的例子。
  1. 请注意一下其它的函数:img.clone()之前已经讲过——除了拷贝Mat数据结构的头和数据指针,连数据也一块拷贝,并将数据指针指向新拷贝的数据。

效果

notion image
左边是元素图片,中间是经过图片反转之后的图片,右边是使用幂次变换增强后的图片。
Loading...