C++ 程序使用 OpenCV 生成两个黑色的灰度图像,并添加随机特征点,然后将这两个图像合并为一张图像并显示

这篇具有很好参考价值的文章主要介绍了C++ 程序使用 OpenCV 生成两个黑色的灰度图像,并添加随机特征点,然后将这两个图像合并为一张图像并显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

源码文件

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>

std::vector<cv::KeyPoint> generateRandomKeyPoints(const cv::Mat& image, int numPoints) {
    std::vector<cv::KeyPoint> keypoints;
    cv::RNG rng; // OpenCV 随机数生成器
    for (int i = 0; i < numPoints; ++i) {
        cv::Point2f pt(rng.uniform(0.f, (float)image.cols), rng.uniform(0.f, (float)image.rows));
        keypoints.push_back(cv::KeyPoint(pt, 1.f));
    }
    return keypoints;
}

int main() {
    // 生成两个简单的灰度图像
    cv::Mat imLeft = cv::Mat::zeros(240, 320, CV_8UC1); // 240x320 的黑色图像
    cv::Mat imRight = cv::Mat::zeros(240, 320, CV_8UC1);

    // 生成一些随机特征点
    std::vector<cv::KeyPoint> mvKeys = generateRandomKeyPoints(imLeft, 100);
    std::vector<cv::KeyPoint> mvKeysRight = generateRandomKeyPoints(imRight, 100);

    cv::Mat imLeftBGR;
    imLeftBGR = imLeft.clone();
    cv::cvtColor(imLeft, imLeftBGR, cv::COLOR_GRAY2BGR);
    cv::drawKeypoints(imLeftBGR, mvKeys, imLeftBGR, cv::Scalar(0, 0, 255));

    cv::Mat imRightBGR;
    imRightBGR = imRight.clone();
    cv::cvtColor(imRight, imRightBGR, cv::COLOR_GRAY2BGR);
    cv::drawKeypoints(imRightBGR, mvKeysRight, imRightBGR, cv::Scalar(0, 255, 0));

    cv::Mat mergedImage(imLeftBGR.rows, imLeftBGR.cols + imRightBGR.cols, imLeftBGR.type());
    imLeftBGR.copyTo(mergedImage(cv::Rect(0, 0, imLeftBGR.cols, imLeftBGR.rows)));
    imRightBGR.copyTo(mergedImage(cv::Rect(imLeftBGR.cols, 0, imRightBGR.cols, imRightBGR.rows)));


    cv::imshow("Merged Image", mergedImage);
    cv::waitKey(0);

    return 0;
}

C++ 程序使用 OpenCV 生成两个黑色的灰度图像,并添加随机特征点,然后将这两个图像合并为一张图像并显示,opencv,C++,c++,opencv,开发语言

功能解读

  1. 生成灰度图像:程序创建了两个大小为 240x320 像素的黑色灰度图像,分别命名为 imLeftimRight

  2. 生成随机特征点

    • 使用 generateRandomKeyPoints 函数在这两个图像上生成指定数量(在这个例子中是100个)的随机特征点。
    • 这些特征点存储在 std::vector<cv::KeyPoint> 类型的 mvKeysmvKeysRight 中。
  3. 处理和显示左图像(imLeft

    • 克隆 imLeftimLeftBGR
    • 使用 cv::cvtColorimLeftBGR 从灰度转换为 BGR 彩色格式。
    • 使用 cv::drawKeypointsimLeftBGR 上绘制 mvKeys 中的特征点,这些点以红色显示(BGR: 0, 0, 255)。
  4. 处理和显示右图像(imRight

    • 类似地,克隆 imRightimRightBGR 并将其转换为 BGR 彩色格式。
    • 使用 cv::drawKeypointsimRightBGR 上绘制 mvKeysRight 中的特征点,这些点以绿色显示(BGR: 0, 255, 0)。
  5. 合并图像

    • 创建一个新的图像 mergedImage,大小足以容纳 imLeftBGRimRightBGR 并排放置。
    • imLeftBGRimRightBGR 分别复制到 mergedImage 的左侧和右侧。
  6. 显示合并后的图像

    • 使用 cv::imshow 显示 mergedImage
    • cv::waitKey(0) 使得图像窗口保持打开状态,直到用户按下任意键。

总体来说,这个程序演示了如何在 OpenCV 中生成图像,添加特征点,进行基本的图像处理(例如颜色空间转换和特征点绘制),以及如何合并和显示图像。这种类型的处理在计算机视觉和图像分析中很常见。文章来源地址https://www.toymoban.com/news/detail-829913.html

编译文件

cmake_minimum_required(VERSION 3.10)
project(ImagePyramid)

# 设置C++标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 找到OpenCV包
find_package(OpenCV REQUIRED)

# 包含OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})

# 添加可执行文件
add_executable(ImagePyramid main.cpp)

# 链接OpenCV库
target_link_libraries(ImagePyramid ${OpenCV_LIBS})

到了这里,关于C++ 程序使用 OpenCV 生成两个黑色的灰度图像,并添加随机特征点,然后将这两个图像合并为一张图像并显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#使用OpenCv(OpenCVSharp)图像处理实例:亮度、对比度、灰度

    本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行亮度、对比度、灰度处理。 目录 亮度和对比度原理 灰度 实例 图像亮度通俗理解便是图像的明暗程度,数字图像 f(x,y) = i(x,y) r(x, y) ,如果灰度值在[0,255]之间,则 f 值越接近0亮度越低,f 值越接近255亮度越

    2024年02月13日
    浏览(76)
  • 使用 OpenCV 添加(混合)两个图像

    在本教程中,您将学习: 什么是 线性混合 以及为什么它有用; 如何使用 addWeighted() 添加两个图像 注意 下面的解释属于Richard Szeliski的《计算机视觉:算法和应用》一书 从我们之前的教程中,我们已经知道了一些 像素运算符 。一个有趣的二元(双输入)算子是 线性混合算

    2024年02月20日
    浏览(40)
  • opencv 图像基础处理_灰度图像

    二值图像表示起来简单方便,但是因为其仅有黑白两种颜色,所表示的图像不够细腻。如果想要表现更多的细节,就需要使用更多的颜色。例如,图 2-3 中的 lena 图像是一幅灰度图像, 它采用了更多的数值以体现不同的颜色,因此该图像的细节信息更丰富。 通常,计算机会将

    2024年02月15日
    浏览(57)
  • opencv读取灰度图像

    本文档创建于2023年3月10日 本文记录了C++版opencv读取灰度图像的不同方式及区别 作者:RobotFreak C++版的 opencv 读取灰度图像可以有不同的方法,这里列出几种方法,并简述它们的区别。 这里用到的两张图片为lena.jpg(彩色)和lena.bmp(灰度) 图像本身就是灰度图像,直接使用

    2024年02月06日
    浏览(66)
  • opencv图像灰度化

      图像灰度化就是将图像的亮度值(R,G,B)按照一定的方式映射到0-255之间的灰度值上,为了使图像看起来不那么单调,需要将图像的亮度值进行变换。下面简单介绍下 opencv中的灰度化函数: 1、先将图像的像素值转换为R,G,B三个分量,其中R分量用于图像灰度变换,G分量用于

    2024年02月09日
    浏览(43)
  • OpenCV图像处理-灰度处理

    灰度的线性变换将图像中的所有像素点的值按 线性变换函数 进行变换。 在曝光不足或过度的情况下,图像的灰度值会局限在一个很小的范围内,这时在显示器上看到的将是一个模糊不清、似乎没有层次的图像。 针对这一情况,使用一个线性单值函数对图像内的每一个像素做

    2024年02月08日
    浏览(106)
  • Opencv 图像处理:图像基础操作与灰度转化

    本文已收录于Opencv系列专栏: 深入浅出OpenCV ,专栏旨在详解Python版本的Opencv,为计算机视觉的开发与研究打下坚实基础。免费订阅,持续更新。 1.图像格式 图像压缩比: 通过编码器压缩后的图象数字大小和原图象数字大小的压缩比。 BMP 格式 Windows系统下的 标准位图格式 ,

    2024年02月04日
    浏览(51)
  • 详解cv2.addWeighted函数【使用 OpenCV 添加(混合)两个图像-Python版本】

    有的时候我们需要将两张图片在alpha通道进行混合,比如深度学习数据集增强方式MixUp。OpenCV的 addWeighted 提供了相关操作,此篇博客将详细介绍这个函数,并给出代码示例。🚀🚀 o u t p u t I m g = s a t u r a t e ( α ∗ i n p u t I m g 1 + β ∗ i n p u t I m g 2 + γ ) rm outputImg=saturate( al

    2024年02月06日
    浏览(98)
  • 【OpenCV】 基础入门(二)图像基础概念 | 图像灰度化处理 | 图像二值化处理

      在计算机中用一般用 M x N 的矩阵来表示一幅尺寸大小为 M x N 的数字图像,矩阵元素的值就是该图像对应位置上的像素值。    对于计算机本地磁盘中的彩色图像,单机鼠标右键,选择“属性”,可以看到一幅图像的基本信息。 1、灰度图:   灰度图是每个像素只有一

    2024年04月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包