资源简介
由于项目需要,其中一部分功能是需要实现360度旋转相机的图像拼接显示功能,于是使用opencv来将其实现。
显示方式为:接收一帧,显示一帧
//image1、image2分别为待拼接的左右两张图像,index为image1的编号。BIGframe为存放的拼接图像。每执行一次放置一张图像。
//当输入index为0时,即为第一张图像时,仅仅存入当前帧,不拼接;当index不等于0时,执行拼接操作。
//该实现功能:读取第一帧,当下一帧到来时,使用拼接、平滑计算,重新计算上一帧,并去掉上一阵左边重叠区域,得到更新的上一帧。
//第一张与最后一张图像之间不执行拼接操作
代码片段和文件信息
// ImageStitch.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#include
#include
#include
#include
#include
#include
using namespace std;
using namespace cv;
//image1、image2分别为待拼接的左右两张图像,index为image1的编号。BIGframe为存放的拼接图像。每执行一次放置一张图像。
//当输入index为0时,即为第一张图像时,仅仅存入当前帧,不拼接;当index不等于0时,执行拼接操作。
//该实现功能:读取第一帧,当下一帧到来时,使用拼接、平滑计算,重新计算上一帧,并去掉上一阵左边重叠区域,得到更新的上一帧。
//第一张与最后一张图像之间不执行拼接操作
void ImageStitch(int index Mat &image1 Mat &image2 const Mat &Comframe)
{
static int image_source_width = 120;
static int image_template_width = 100;
static int image_template_height = 580;
static int deltaY = 0;
static Point PreMaxLoc;
static const int BigCols = 6;//拼接的图像每行6张
static const int BigRows = 2;//拼接的图像每列2张
static const int Firstframe = 0;
if (!index)
{
PreMaxLoc.x = 5;//偏移量x属于0-20x取任意位置均可以。保持第一张图片宽度为800-120+5=685
PreMaxLoc.y = 10;//偏移量y属于0-20当y=0时,为理想值,无偏移量(即两帧图像无上下偏移)。
deltaY = 0;//第一张图像上下无偏移量
}
else
{
Mat image_source = image1(Rect(800 - image_source_width 0 image_source_width 600));
Mat image_template = image2(Rect(0 10 image_template_width image_template_height));
cv::Mat image_matched;
//模板匹配
cv::matchTemplate(image_source image_template image_matched cv::TM_CCORR_NORMED); //TM_SQDIFF=0 TM_SQDIFF_NORMED=1 TM_CCORR=2 TM_CCORR_NORMED=3 TM_CCOEFF=4 TM_CCOEFF_NORMED=5
double minVal maxVal;
cv::Point minLoc maxLoc;
//寻找最佳匹配位置
cv::minMaxLoc(image_matched &minVal &maxVal &minLoc &maxLoc);
Mat overlay1 = image1(Rect(800 - image_source_width + maxLoc.x 0 image_source_width - maxLoc.x image1.rows - 10 + maxLoc.y)); //左边区域
Mat overlay2 = image2(Rect(0 10 - maxLoc.y image_source_width - maxLoc.x image2.rows - 10 + maxLoc.y)); //右边区域
Mat overlay = Mat::zeros(overlay2.rows overlay2.cols CV_8UC1);
for (int i = 0; i< overlay2.rows; i++)
{
uchar* dataoverlay1 = overlay1.ptr(i);
uchar* dataoverlay2 = overlay2.ptr(i);
uchar* dataoverlay = overlay.ptr(i);
for (int j = 0; j {
double weight;
weight = (double)j / overlay2.cols; //随距离改变而改变的叠加系数
dataoverlay[j] = (1 - weight)*dataoverlay1[j] + weight*dataoverlay2[j];
}
}
overlay.copyTo(image1(Rect(800 - image_source_width + maxLoc.x 0 overlay.cols overlay.rows)));
deltaY = deltaY + (10 - PreMaxLoc.y);
Mat newframe1 = image1(Rect(image_source_width - PreMaxLoc.x deltaY image1.cols - image_source_width + PreMaxLoc.x 514));//高度给定值514,否则由于下面的resize语句,造成错位
cv::resize(newframe1 newframe1 Size(640 480) 0 0 INTER_NEAREST);
newframe1.copyTo(Comframe(Rect(((index - 1) % BigCols)* newframe1.cols ((index - 1) / BigCols)*newframe1.rows newframe1.cols newframe1.rows)));
if (index == (BigCols*BigRows + Firstframe - 1))//最后一张图像不执行拼接操作,与上一张图像同时显示
{
Mat newframe2 = image2(Rect(image_source_width - maxLoc.x deltaY
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 77312 2018-11-15 18:55 ImageStitch\Debug\ImageStitch.exe
文件 456352 2018-11-15 18:55 ImageStitch\Debug\ImageStitch.ilk
文件 1560576 2018-11-15 18:55 ImageStitch\Debug\ImageStitch.pdb
文件 481078 2018-10-22 14:34 ImageStitch\ImageStitch\0.bmp
文件 481078 2018-10-22 14:34 ImageStitch\ImageStitch\1.bmp
文件 481078 2018-10-22 14:34 ImageStitch\ImageStitch\10.bmp
文件 481078 2018-10-22 14:34 ImageStitch\ImageStitch\11.bmp
文件 481078 2018-10-22 14:34 ImageStitch\ImageStitch\2.bmp
文件 481078 2018-10-22 14:34 ImageStitch\ImageStitch\3.bmp
文件 481078 2018-10-22 14:34 ImageStitch\ImageStitch\4.bmp
文件 481078 2018-10-22 14:34 ImageStitch\ImageStitch\5.bmp
文件 481078 2018-10-22 14:34 ImageStitch\ImageStitch\6.bmp
文件 481078 2018-10-22 14:34 ImageStitch\ImageStitch\7.bmp
文件 481078 2018-10-22 14:34 ImageStitch\ImageStitch\8.bmp
文件 481078 2018-10-22 14:34 ImageStitch\ImageStitch\9.bmp
文件 3687478 2018-11-15 19:49 ImageStitch\ImageStitch\Comfr
文件 315 2018-11-15 18:55 ImageStitch\ImageStitch\Debug\ImageStitch.log
文件 241414 2018-11-15 18:55 ImageStitch\ImageStitch\Debug\ImageStitch.obj
文件 1703936 2018-11-15 18:47 ImageStitch\ImageStitch\Debug\ImageStitch.pch
文件 1758 2018-11-15 18:55 ImageStitch\ImageStitch\Debug\ImageStitch.tlog\cl.command.1.tlog
文件 33230 2018-11-15 18:55 ImageStitch\ImageStitch\Debug\ImageStitch.tlog\CL.read.1.tlog
文件 1714 2018-11-15 18:55 ImageStitch\ImageStitch\Debug\ImageStitch.tlog\CL.write.1.tlog
文件 198 2018-11-15 18:55 ImageStitch\ImageStitch\Debug\ImageStitch.tlog\ImageStitch.lastbuildstate
文件 2252 2018-11-15 18:55 ImageStitch\ImageStitch\Debug\ImageStitch.tlog\li
文件 3680 2018-11-15 18:55 ImageStitch\ImageStitch\Debug\ImageStitch.tlog\li
文件 920 2018-11-15 18:55 ImageStitch\ImageStitch\Debug\ImageStitch.tlog\li
文件 12151 2018-11-15 18:47 ImageStitch\ImageStitch\Debug\stdafx.obj
文件 863232 2018-11-15 18:55 ImageStitch\ImageStitch\Debug\vc120.idb
文件 815104 2018-11-15 18:55 ImageStitch\ImageStitch\Debug\vc120.pdb
文件 4384 2018-11-15 18:55 ImageStitch\ImageStitch\ImageStitch.cpp
............此处省略20个文件信息
相关资源
- opencv 将两幅等宽图像拼接在一起
- imageStitching实现图像拼接
- 利用halcon进行图像拼接的基本教程
- 基于halcon的图像拼接算法
- 纯C实现的图像拼接
- SURF算法的图像拼接和快速拼接算法
- 利用OpenCV(2.4.13)的SURF/SIFT + RANSAC
- autostitch64 多幅无序图像自动排序,配
- 基于opencv实现的图像拼接
- 结合最佳缝合线和多分辨率融合的图
- 基于OpenCV进行图像拼接原理解析和编
- 全景拼接_多张图像拼接(stitching_de
- 图像拼接技术及其实现
- Opencv3.4SUFR纵向图像平滑拼接
- 图像拼接的经典论文
- 一篇关于图像拼接的比较好的硕士论
- Natural image stitching with the global simila
- 基于SURF算法的图像拼接
- 全景图像拼接图像拼接作业
- 基于相位相关算法的全景图像拼接
- opencv 360度n张图像拼接,任意角度两
- 基于SIFT特征的全景图像拼接(Qt)
- 18年最新立体图像拼接
- 眼底图像拼接
- OPENCV实现ORB/SURF/SIFT + RANSAC 图像自动拼
- OpenCvSharp 读摄像头及图像拼接功能
- 车载全景环视系统相关文档
- ENVI遥感图像进行图像拼接的多光谱遥
- OpenCV图像拼接原理解析和分模块实现
- 基于机器视觉的全景图像拼接
评论
共有 条评论