iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >基于C++的摄像头图像采集及拼接程序该怎么实现
  • 721
分享到

基于C++的摄像头图像采集及拼接程序该怎么实现

2023-06-28 23:06:41 721人浏览 泡泡鱼
摘要

今天给大家介绍一下基于c++的摄像头图像采集及拼接程序该怎么实现。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。程序的说明实现从摄像头实时采集单帧图像,之后完成

今天给大家介绍一下基于c++的摄像头图像采集及拼接程序该怎么实现。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。

程序的说明

实现从摄像头实时采集单帧图像,之后完成图像的拼接,本程序实现了两张图片的拼接和三张图片的拼接。

在此之前你需要在 linux 下安装 OpenCV Package 这个包,因为本程序主要使用 opencv 这个包中提供的 api 函数。

实现从摄像头实时不同视角采集视频的单帧图像并保存实时采集的视频文件之后,完成图像的拼接,由于实验室设备有限,手头只有两个摄像头一次只能抓取。

两张不同视角的单帧图像,我们抓取的单帧图像保存在当前项目目录下的 frame1 和 frame2 文件夹中,因此我同时制作了两个完成程序。

拼接的程序,一个实现完成两个不同视角的图像拼接,另一个实现三张不同视角的单帧图像的拼接。其中的 testusb.cpp 文件是测试摄像头的程序。在执行本程序前,你应该保证有两个是摄像头插在主机端口上,用于实时采集单帧图像。

代码介绍

在进行程序的编译前,请确定你已经安装了 opencv2.4.9 和 pkg-config 包,本程序是在 ubuntu14.04 平台下实现的,在本项目目录下,已经有编译生成的可执行程序,其中 Camera_to_Frmae.cpp 是我们从双摄像头实时抓取单帧图像的源码

  • ImageJoint.cpp 和 ImageJoint2.cpp、ImageJoint3.cpp 分别是完成两张不同视角的图像拼接和三张不同视角的图像拼接程序,其中三张图像拼接的图像是我从网上找的现成的图像库

  • testusb.cpp 是我测试摄像头的程序

程序编译

g++ -o dst src.cpp \`pkg-config opencv --cflags --libs\`

程序的执行和退出

  • ./dst

  • 程序需要退出时,按 Ctrl + C 快捷键

效果

从摄像头设备采集两张单帧图像

基于C++的摄像头图像采集及拼接程序该怎么实现

基于C++的摄像头图像采集及拼接程序该怎么实现

图像拼接效果图

基于C++的摄像头图像采集及拼接程序该怎么实现

补充:c++利用opencv打开摄像头并且保存图片

项目背景

利用一个usb双目摄像机进行双目测距的项目,这个项目代码有助于使用usb双目摄像机打开摄像机并且保存图片

打开双目相机的函数

void SetCam(int weigth, int height, int num){string a = "0";string Error;VideoCapture Cam(0);Cam.set(CV_CAP_PROP_FRAME_WIDTH, weigth);Cam.set(CV_CAP_PROP_FRAME_HEIGHT, height);while (!Cam.isOpened()){a = to_string(num);Error = "cannot open the camera1!";Error = Error.replace(22, 1, a);//Error.copy(error, 24, 0);//这里5代表复制几个字符,0代表复制的位置,}//namedWindow("摄像头");//关键一句代码while (true) {Cam >> input_image;//将影像传入图片leftImage = input_image(Rect(0, 0, input_image.size().width / 2, input_image.size().height));//split left imagerightImage = input_image(Rect(input_image.size().width / 2, 0, input_image.size().width / 2, input_image.size().height));imshow("leftImage", leftImage);//left imageimshow("rightImage", rightImage);//right imageSave(i, 20);if (27 == waiTKEy(30))break;return ;}

保存图片函数Save

void Save(int &imgnum, int amount){if (imgnum < amount){a = to_string(imgnum);seat = floor((imgnum - 1) / 10);Left = Left.replace(4 + seat, 1, a);Right = Right.replace(5 + seat, 1, a);imwrite(Left, leftImage);imwrite(Right, rightImage);imgnum += 1;}}

全部代码

#include <opencv2/opencv.hpp>#include<iOStream>using namespace cv;using namespace std;VideoCapture Cam1, Cam2;const int  weigth = 1280;const int height = 480;static string Left = "Left0.jpg", Right = "Right0.jpg", a = "0";static int seat = 0;static Mat input_image, leftImage, rightImage;static int i = 0;void Save(int &imgnum, int amount){if (imgnum < amount){a = to_string(imgnum);seat = floor((imgnum - 1) / 10);Left = Left.replace(4 + seat, 1, a);Right = Right.replace(5 + seat, 1, a);imwrite(Left, leftImage);imwrite(Right, rightImage);imgnum += 1;}}void SetCam(int weigth, int height, int num)string a = "0";string Error;VideoCapture Cam(0);Cam.set(CV_CAP_PROP_FRAME_WIDTH, weigth);Cam.set(CV_CAP_PROP_FRAME_HEIGHT, height);while (!Cam.isOpened())a = to_string(num);Error = "cannot open the camera1!";Error = Error.replace(22, 1, a);//Error.copy(error, 24, 0);//这里5代表复制几个字符,0代表复制的位置,//namedWindow("摄像头");//关键一句代码while (true) {Cam >> input_image;//将影像传入图片leftImage = input_image(Rect(0, 0, input_image.size().width / 2, input_image.size().height));//split left imagerightImage = input_image(Rect(input_image.size().width / 2, 0, input_image.size().width / 2, input_image.size().height));imshow("leftImage", leftImage);//left imageimshow("rightImage", rightImage);//right imageSave(i, 20);if (27 == waitKey(30))break;return ;void main()//char* error = "error";SetCam(weigth, height, 10);

以上就是基于C++的摄像头图像采集及拼接程序该怎么实现的全部内容了,更多与基于C++的摄像头图像采集及拼接程序该怎么实现相关的内容可以搜索编程网之前的文章或者浏览下面的文章进行学习哈!相信小编会给大家增添更多知识,希望大家能够支持一下编程网!

--结束END--

本文标题: 基于C++的摄像头图像采集及拼接程序该怎么实现

本文链接: https://www.lsjlt.com/news/321197.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于C++的摄像头图像采集及拼接程序该怎么实现
    今天给大家介绍一下基于C++的摄像头图像采集及拼接程序该怎么实现。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。程序的说明实现从摄像头实时采集单帧图像,之后完成...
    99+
    2023-06-28
  • 基于C++的摄像头图像采集及拼接程序的简单实现
    程序的说明 实现从摄像头实时采集单帧图像,之后完成图像的拼接,本程序实现了两张图片的拼接和三张图片的拼接。 在此之前你需要在 linux 下安装 opencv Package 这个包...
    99+
    2024-04-02
  • iOS实现摄像头实时采集图像的方法
    小编给大家分享一下iOS实现摄像头实时采集图像的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!iOS实现摄像头实时采集图像的具体内容如下新接到一个实时获取摄像...
    99+
    2023-06-14
  • C#怎么利用AForge实现摄像头信息采集
    要利用AForge实现摄像头信息采集,首先需要安装AForge.NET Framework。然后,可以按照以下步骤使用C#代码实现摄...
    99+
    2024-03-01
    C#
  • PythonOpenCV实现基于模板的图像拼接
    之前基于特征点的图像拼接如果是多张图,每次计算变换矩阵,都有误差,最后可以图像拼完就变形很大,基于模板的方法可以很好的解决这一问题。 import cv2 import nump...
    99+
    2024-04-02
  • 基于Qt OpenCV怎么实现图像数据采集软件
    这篇文章主要介绍“基于Qt OpenCV怎么实现图像数据采集软件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Qt OpenCV怎么实现图像数据采集软件”文章能帮助大家解决问...
    99+
    2023-07-02
  • Android 外接基于UVC协议的摄像头并实现预览
    先来一段从网上找到的理论知识,对UVC协议有初步的印象 UVC协议:USB Video Class,USB视频类,是一种为USB视频捕获设备定义的协议标准。 Android 平台支持使用即插即用的 USB 摄像头(即网络摄像头),但前提是这...
    99+
    2023-09-01
    android
  • 详解C++ OpenCV实现图像拼接的原理及方法
    目录前言一、图像拼接相关原理 图像特征采集特征提取算法透视变换透视矩阵图像拷贝二、案例实现Step1:导入目标图片Step2:特征点提取和匹配 Step3:图像配...
    99+
    2024-04-02
  • 基于Python和openCV实现图像的全景拼接详细步骤
    基本介绍 图像的全景拼接,即“缝合”两张具有重叠区域的图来创建一张全景图。其中用到了计算机视觉和图像处理技术有:关键点检测、局部不变特征、关键点匹配、RANSAC(Random Sa...
    99+
    2024-04-02
  • 基于Python怎么实现捕获,播放和保存摄像头视频
    本篇内容介绍了“基于Python怎么实现捕获,播放和保存摄像头视频”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!读取视频要捕获视频,你需要创...
    99+
    2023-06-30
  • 基于Tensorflow的图像识别怎么实现
    要实现基于Tensorflow的图像识别,可以按照以下步骤进行: 准备数据集:首先需要准备一个包含图像和对应标签的数据集,可以使...
    99+
    2024-03-13
    tensorflow
  • 基于Tensorflow的图像识别功能怎么实现
    要实现基于Tensorflow的图像识别功能,可以按照以下步骤进行: 准备数据集:首先需要准备包含标记好的图像数据集,这些数据将...
    99+
    2024-04-03
    tensorflow
  • OpenCV基于分水岭算法的图像分割怎么实现
    本文小编为大家详细介绍“OpenCV基于分水岭算法的图像分割怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“OpenCV基于分水岭算法的图像分割怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. ...
    99+
    2023-07-05
  • 基于matlab对比度和结构提取的多模态解剖图像融合怎么实现
    本篇内容主要讲解“基于matlab对比度和结构提取的多模态解剖图像融合怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于matlab对比度和结构提取的多模态解剖图像融合怎么实现”吧!一、...
    99+
    2023-06-21
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作