图像操作
发布日期:2021-05-10 23:43:44 浏览次数:39 分类:精选文章

本文共 2314 字,大约阅读时间需要 7 分钟。

读取与处理像素:OpenCV 实操指南

一、引言

在 OpenCV 开发中,像素的读取与处理是基本且频繁的操作。本文将详细介绍如何在 OpenCV 中读取不同类型(如灰度和彩色)的像素,操作包括反转图像等常见调整。

二、读取像素

OpenCV 提供了多种方式来读取图像 像素。以下将分别介绍读取灰度图像和彩色图像的方法。

1. 灰度图像(Gray)像素的读取

灰度图像是单通道的图像,像素值范围为 0-255。OpenCV 中,灰度图像通常以 CV_8UC1 格式存储。

  • 读取方法
    Scalar intensity = src.at
    (y, x);

    或者

    Scalar intensity = src.at
    (Point(y, x));

2. 彩色图像(RGB)像素的读取

彩色图像包含红、绿、蓝三通道。OpenCV 中,每个像素以 Vec3b 类型表示,依次对应蓝、绿、红。

  • 读取方法
    Vec3b color = src.at
    (row, col);

    分别获取三通道值:

    int blue = color[0];
    int green = color[1];
    int red = color[2];

3. Vec3b 与 Vec3f 之间的转换

  • Vec3b:存储三通道uchar数据,顺序为蓝、绿、红。

  • Vec3f:存储三通道float数据,用于浮点精度操作。

  • 转换方法: 使用 OpenCV 提供的 API 函数 cv::convertTo,将 CV_8UC1 转换为 CV_32F1

    src.convertTo(dst, CV_32F);

三、使用 OpenCV API

1. 导入必要的头文件

确保在代码中包含 OpenCV 库文件:

#include 

同时导入标准输入输出流:

#include 

2. 显窗口与图像显示

  • 打开图像窗口并显示原始图像:

    namedWindow("src image", WINDOW_AUTOSIZE);
    imshow("src image", src);
  • 显示灰度图像:

    namedWindow("gray_image", WINDOW_AUTOSIZE);
    imshow("gray_image", gray_src);

3. 图像反转操作

反转图像是一种常见操作,通常用于校正或创造视觉效果。以下将分别实现两种反转模式:单通道反转和三通道反转。

单通道反转(灰度图像)

循环遍历灰度图像,反转每个像素:

int height = gray_src.rows;
int width = gray_src.cols;
for(int row = 0; row < height; row++){
for(int col = 0; col < width; col++){
gray_src.at
(row, col) = 255 - gray_src.at
(row, col);
}
}

三通道反转(彩色图像)

循环遍历每个像素,反转三个通道:

Mat dst;
dst.create(src.size(), src.type());
int channels = src.channels();
int height = src.rows;
int width = src.cols;
for(int row = 0; row < height; row++){
for(int col = 0; col < width; col++){
if(channels == 1){
int gray = src.at
(row, col);
gray_src.at
(row, col) = 255 - gray;
}else if(channels == 3){
Vec3b color = src.at
(row, col);
Vec3b inverted_color = {255 - color[0], 255 - color[1], 255 - color[2]};
dst.at
(row, col) = inverted_color;
}
}
}

四、测试与验证

  • 创建反转后的窗口并显示:

    namedWindow("sub src", WINDOW_AUTOSIZE);
    imshow("sub src", dst);
    imwrite("sub.jpg", dst);
  • 显示自动生成的反转图像(bitwise_not 操作):

Mat dst1;
bitwise_not(src, dst1);
namedWindow("bitwise_not", WINDOW_AUTOSIZE);
imshow("bitwise_not", dst1);
imwrite("bitwise_not.jpg", dst1);
  • 键盘检测与退出处理:
    waitKey(0);
    return 0;

五、总结

本文介绍了如何在 OpenCV 中读取并处理不同类型的像素数据,并通过实际例子展示了图像反转操作的实现方法。通过本文的步骤,您可以自信地处理各种图像数据,并利用 OpenCV 脚本完成更多图像分析任务。

上一篇:MMdetection 目标检测工具箱
下一篇:Mat 对象的使用

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月18日 15时17分02秒