• 大小: 5.34MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-11
  • 语言: 其他
  • 标签: 图像拼  

资源简介

由于项目需要,其中一部分功能是需要实现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\Comframe.bmp

     文件        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\link.command.1.tlog

     文件       3680  2018-11-15 18:55  ImageStitch\ImageStitch\Debug\ImageStitch.tlog\link.read.1.tlog

     文件        920  2018-11-15 18:55  ImageStitch\ImageStitch\Debug\ImageStitch.tlog\link.write.1.tlog

     文件      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个文件信息

评论

共有 条评论