首页 > 其他分享 >【全网独家】OpenCV: 缩写(uchar、ushort、Vec) 介绍与应用

【全网独家】OpenCV: 缩写(uchar、ushort、Vec) 介绍与应用

时间:2024-09-02 10:52:58浏览次数:13  
标签:uchar image ushort OpenCV int 图像处理 图像 cv

1. 缩写介绍

uchar

  • 定义unsigned char,即无符号字符类型。
  • 范围:0 到 255。
  • 应用:常用于存储灰度图像的像素值。

ushort

  • 定义unsigned short,即无符号短整型。
  • 范围:0 到 65535。
  • 应用:在高动态范围(HDR)图像处理中使用较多,因为它能表示更宽的数值范围。

Vec

  • 定义:OpenCV 中的模板类,用于表示向量,如 Vec3b 表示包含三个 uchar 的向量。
  • 应用:主要用于存储图像中的多通道像素值,比如 RGB 图像。

2. 应用场景

  • uchar

    • 灰度图像处理。
    • 二值图像处理。
  • ushort

    • HDR 图像处理。
    • 深度图像处理。
  • Vec

    • 多通道图像(如RGB彩色图像)。
    • 像素运算。

以下是关于如何使用 ucharushortVec 进行图像处理的代码示例。假设我们使用的是OpenCV库来实现这些功能。

灰度图像处理(uchar)

#include <opencv2/opencv.hpp>

int main() {
    // 读取灰度图像
    cv::Mat gray_image = cv::imread("gray_image.jpg", cv::IMREAD_GRAYSCALE);

    if (gray_image.empty()) {
        std::cerr << "无法打开图像" << std::endl;
        return -1;
    }

    // 应用高斯模糊
    cv::Mat blurred_image;
    cv::GaussianBlur(gray_image, blurred_image, cv::Size(5, 5), 0);

    // 保存结果图像
    cv::imwrite("blurred_gray_image.jpg", blurred_image);

    return 0;
}

二值图像处理(uchar)

#include <opencv2/opencv.hpp>

int main() {
    // 读取灰度图像
    cv::Mat gray_image = cv::imread("gray_image.jpg", cv::IMREAD_GRAYSCALE);

    if (gray_image.empty()) {
        std::cerr << "无法打开图像" << std::endl;
        return -1;
    }

    // 二值化处理
    cv::Mat binary_image;
    cv::threshold(gray_image, binary_image, 128, 255, cv::THRESH_BINARY);

    // 保存结果图像
    cv::imwrite("binary_image.jpg", binary_image);

    return 0;
}

HDR 图像处理(ushort)

#include <opencv2/opencv.hpp>

int main() {
    // 读取HDR图像
    cv::Mat hdr_image = cv::imread("hdr_image.hdr", cv::IMREAD_ANYDEPTH);

    if (hdr_image.empty()) {
        std::cerr << "无法打开图像" << std::endl;
        return -1;
    }

    // 应用亮度调整
    cv::Mat adjusted_image;
    hdr_image.convertTo(adjusted_image, CV_16U, 65535); // 将浮点型转换为ushort

    // 保存结果图像
    cv::imwrite("adjusted_hdr_image.png", adjusted_image);

    return 0;
}

深度图像处理(ushort)

#include <opencv2/opencv.hpp>

int main() {
    // 读取深度图像
    cv::Mat depth_image = cv::imread("depth_image.png", cv::IMREAD_UNCHANGED);

    if (depth_image.empty()) {
        std::cerr << "无法打开图像" << std::endl;
        return -1;
    }

    // 深度图像归一化
    cv::Mat normalized_depth_image;
    cv::normalize(depth_image, normalized_depth_image, 0, 65535, cv::NORM_MINMAX, CV_16U);

    // 保存结果图像
    cv::imwrite("normalized_depth_image.png", normalized_depth_image);

    return 0;
}

多通道图像处理(如RGB彩色图像)(Vec)

#include <opencv2/opencv.hpp>

int main() {
    // 读取多通道图像(如RGB彩色图像)
    cv::Mat color_image = cv::imread("color_image.jpg", cv::IMREAD_COLOR);

    if (color_image.empty()) {
        std::cerr << "无法打开图像" << std::endl;
        return -1;
    }

    // 转换为HSV颜色空间
    cv::Mat hsv_image;
    cv::cvtColor(color_image, hsv_image, cv::COLOR_BGR2HSV);

    // 保存结果图像
    cv::imwrite("hsv_image.jpg", hsv_image);

    return 0;
}

像素运算(Vec)

#include <opencv2/opencv.hpp>

int main() {
    // 读取两幅相同尺寸的图像
    cv::Mat image1 = cv::imread("image1.jpg", cv::IMREAD_COLOR);
    cv::Mat image2 = cv::imread("image2.jpg", cv::IMREAD_COLOR);

    if (image1.empty() || image2.empty()) {
        std::cerr << "无法打开图像" << std::endl;
        return -1;
    }

    // 像素加法运算
    cv::Mat result_image;
    cv::add(image1, image2, result_image);

    // 保存结果图像
    cv::imwrite("result_addition.jpg", result_image);

    return 0;
}

以上是不同类型图像处理的代码示例,每个代码段分别展示了不同数据类型和处理方法。所有代码均采用C++编写,并利用OpenCV库进行图像处理。

3. 原理解释

这些缩写主要涉及到图像处理中的数据类型及其在内存中的表示方式。对于灰度图像,每个像素值可以用 uchar 存储;而对于彩色图像,每个像素通常需要一个包含多个 ucharushort 的向量来表示。

4. 算法原理流程图

灰度图像 HDR 图像 彩色图像 输入图像 图像类型检测 使用 uchar 处理 使用 ushort 处理 使用 Vec 处理 处理结果 输出图像

5. 算法原理解释

根据输入图像类型的不同,选择合适的数据结构进行处理。灰度图像直接使用 uchar 表示每个像素;HDR 图像则使用 ushort 以表示更高的动态范围;彩色图像使用 Vec 来存储每个像素的多个通道值。

6. 实际应用代码示例实现

灰度图像处理示例

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat grayImage = imread("gray_image.jpg", IMREAD_GRAYSCALE);
    if (grayImage.empty()) {
        return -1;
    }

    // 访问并修改像素值
    for (int i = 0; i < grayImage.rows; ++i) {
        for (int j = 0; j < grayImage.cols; ++j) {
            uchar& pixel = grayImage.at<uchar>(i, j);
            pixel = 255 - pixel; // 反转灰度值
        }
    }

    imshow("Inverted Gray Image", grayImage);
    waitKey(0);

    return 0;
}

彩色图像处理示例

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat colorImage = imread("color_image.jpg", IMREAD_COLOR);
    if (colorImage.empty()) {
        return -1;
    }

    // 访问并修改像素值
    for (int i = 0; i < colorImage.rows; ++i) {
        for (int j = 0; j < colorImage.cols; ++j) {
            Vec3b& pixel = colorImage.at<Vec3b>(i, j);
            pixel[0] = 255 - pixel[0]; // 反转蓝色通道
            pixel[1] = 255 - pixel[1]; // 反转绿色通道
            pixel[2] = 255 - pixel[2]; // 反转红色通道
        }
    }

    imshow("Inverted Color Image", colorImage);
    waitKey(0);

    return 0;
}

7. 测试代码

测试代码可以通过上述代码分别加载不同类型的图像,然后观察处理后的效果。下面是一个简单的测试函数:

void testGrayImageProcessing(const std::string& imagePath) {
    Mat grayImage = imread(imagePath, IMREAD_GRAYSCALE);
    assert(!grayImage.empty());
    // 调用上文中灰度图像处理函数
}

void testColorImageProcessing(const std::string& imagePath) {
    Mat colorImage = imread(imagePath, IMREAD_COLOR);
    assert(!colorImage.empty());
    // 调用上文中色彩图像处理函数
}

8. 部署场景

这些代码可以部署在任何支持 OpenCV 的环境下,包括但不限于:

  • 桌面应用程序。
  • 移动应用程序。
  • 嵌入式系统。

9. 材料链接

10. 总结

ucharushortVec 是 OpenCV 中常用的数据类型,它们在图像处理中的作用至关重要。了解和掌握它们的用法能够提升我们处理不同类型图像的能力。

11. 未来展望

随着图像处理技术的不断发展,我们将看到更多高效的数据类型和算法被提出和应用。尤其在深度学习和人工智能的推动下,未来图像处理将变得更加智能和高效。

标签:uchar,image,ushort,OpenCV,int,图像处理,图像,cv
From: https://blog.csdn.net/feng1790291543/article/details/141094834

相关文章

  • [转]OpenCV4.8 GPU版本CMake编译详细步骤 与CUDA代码演示
    导读本文将详细介绍如何使用CMake编译OpenCV4.8CUDA版本并给出Demo演示,方便大家学习使用。CMake编译详细步骤废话不多说,直接进入正题!【1】我使用的工具版本VS2017+CMake3.18.2+OpenCV4.8.0+CUDA11.2一般情况下VS版本≥VS2017均可,CMake版本≥3.18.2,OpenCV......
  • opencv/c++的一些简单的操作(入门)
    目录读取图片读取视频读取摄像头图像处理腐蚀膨胀调整图像大小裁剪和缩放 绘制绘制矩形绘制圆形绘制线条透视变换颜色检测轮廓查找人脸检测检测人脸检测嘴巴可适当调整参数读取图片读取路径widows使用vissto一定是\斜杠#include<opencv2/imgcodec......
  • 【全网独家】OpenCV: 像素巡访(at、ptr) 介绍与应用(代码+测试部署)
    OpenCV:像素巡访(at、ptr)介绍与应用介绍在图像处理过程中,直接操作图像的每个像素值是一个非常常见的需求。OpenCV提供了多种方法来访问和修改图像像素,其中at和ptr是两种高效的方法。at方法:适用于小规模的像素访问操作,提供了方便的接口。ptr方法:更适合大规模......
  • opencv 判断某个坐标点是否在多边形内cv::pointPolygonTest
        cv::pointPolygonTestpointPolygonTest 函数在OpenCV中用于判断点是否在一个多边形的内部、外部或在边界上。该函数不需要考虑多边形的凹凸性,即它可以处理凸多边形和凹多边形。  判断坐标点是否在坐标围起来的区域内判断点是否在点组成的封闭区域......
  • 用OpenCV画简单图形以及绘制栅格地图
    目录前言一、用函数绘制简单图形1.画直线2.画矩形3.画圆形二、绘制栅格地图前言    要完成opencv绘制栅格地图,需要具备的基础知识:opencv相关函数的简单使用(包括简单图形和网格的绘制)一、用函数绘制简单图形importcv2importnumpyasnpimportcv2:导入......
  • Opencv第五章——几何变换
    1. 缩放我们可以通过OpenCV提供的resize()方法实现随意更改图像的大小比例,语法格式如下:dst=cv2.resize(src,dsize,fx,fy,interpolation)参数说明:src:原始图像dsize:输出图像的大小,格式为(宽,高),单位为像素fx:可选参数,水平方向上缩放比例fy:可选参数,竖直方向......
  • opencv开发环境搭建
    从github下载opencv最新源码https://github.com/opencv/opencv,目前最新是5e93c8202363a13fc72df30f8c14069c5ab66e42.Ubuntu环境下编译安装依赖库:sudoapt-getinstallbuild-essentialsudoapt-getinstallcmakegitlibgtk2.0-devpkg-configlibavcodec-devliba......
  • OpenCV(cv::findChessboardCorners())
    目录1.函数原型2.使用场景3.工作原理4.示例4.1角点精细化4.2附加标志5.注意事项cv::findChessboardCorners()是OpenCV提供的一个函数,常用于计算机视觉中的棋盘图像角点检测,特别是相机标定(calibration)和三维重建相关的任务中。1.函数原型boolcv::findChessboard......
  • OpenCV(cv::dft())
    目录1.函数定义2.示例3.使用场景4.注意事项5.总结cv::dft()是OpenCV中用于计算离散傅里叶变换(DFT)的函数。傅里叶变换是一种重要的数学工具,用于将信号从时域转换到频域。这在图像处理和信号处理领域非常有用,例如滤波、卷积、图像频率分析等。1.函数定义voidcv::......