基本信息
源码名称:OpenCV图像拼接项目
源码大小:11.35M
文件格式:.rar
开发语言:C/C++
更新时间:2019-05-05
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
本原码是用C语言实现的SIFT算法,可以提取SIFT特征和利用SIFT特征进行图像拼接和全景图构造,只需进行一些简单的OPENCV配置,就可以顺利运行。
uchar* ptrRs;
uchar* ptr2;
float alpha=0, beta=1; //加权平均法的系数
int stepRs = resultImg.step;
int elemSizeRs = resultImg.elemSize();
int step2 = secondImg.step;
int elemSize2 = secondImg.elemSize();
int channels = resultImg.channels();
int width_col = xEnd - xStart; //重叠区域的终止列数
int height_row = absDelta_y secondImg.rows;//重叠区域的终止行数
//遍历重叠区域(以拼接结果图位置为参考)
for(int row = absDelta_y; row < height_row; row )
{
ptrRs = resultImg.data row*stepRs xStart*elemSizeRs;
ptr2 = secondImg.data (row-absDelta_y)*step2 xOrigin2*elemSize2;
for(int col = 0; col < width_col; col )
{
alpha=float(col)/float(width_col); beta=1-alpha;
//如果拼接图为右左关系,则调换加权系数
if(neiborL2R == false)
{
float temp = alpha;
alpha = beta;
beta = temp;
}
int count = 0;
//如果变换后的图像1像素为0
for(int i = 0; i < channels; i )
{
if(*(ptrRs i) == 0)
count ;
}
if(count == channels)
{
for(int i = 0; i < channels; i )
*(ptrRs i) = *(ptr2 i);
}
//渐入渐出法融合
for(int i = 0; i < channels; i )
{
*(ptrRs i) = saturate_cast <unsigned char>(*(ptrRs i)*beta *(ptr2 i)*alpha);
}
ptrRs = elemSizeRs;
ptr2 = elemSize2;
}
}
本原码是用C语言实现的SIFT算法,可以提取SIFT特征和利用SIFT特征进行图像拼接和全景图构造,只需进行一些简单的OPENCV配置,就可以顺利运行。
uchar* ptrRs;
uchar* ptr2;
float alpha=0, beta=1; //加权平均法的系数
int stepRs = resultImg.step;
int elemSizeRs = resultImg.elemSize();
int step2 = secondImg.step;
int elemSize2 = secondImg.elemSize();
int channels = resultImg.channels();
int width_col = xEnd - xStart; //重叠区域的终止列数
int height_row = absDelta_y secondImg.rows;//重叠区域的终止行数
//遍历重叠区域(以拼接结果图位置为参考)
for(int row = absDelta_y; row < height_row; row )
{
ptrRs = resultImg.data row*stepRs xStart*elemSizeRs;
ptr2 = secondImg.data (row-absDelta_y)*step2 xOrigin2*elemSize2;
for(int col = 0; col < width_col; col )
{
alpha=float(col)/float(width_col); beta=1-alpha;
//如果拼接图为右左关系,则调换加权系数
if(neiborL2R == false)
{
float temp = alpha;
alpha = beta;
beta = temp;
}
int count = 0;
//如果变换后的图像1像素为0
for(int i = 0; i < channels; i )
{
if(*(ptrRs i) == 0)
count ;
}
if(count == channels)
{
for(int i = 0; i < channels; i )
*(ptrRs i) = *(ptr2 i);
}
//渐入渐出法融合
for(int i = 0; i < channels; i )
{
*(ptrRs i) = saturate_cast <unsigned char>(*(ptrRs i)*beta *(ptr2 i)*alpha);
}
ptrRs = elemSizeRs;
ptr2 = elemSize2;
}
}