openCV利用航拍相机从底部向上扫描物体拼接全景图

openCV 图像拼接全景图
摘要由CSDN通过智能技术生成

图像拼接,手机环绕四周,背景不同,拼接一个完整图像有很多demo,但是相机从底部向上扫描巨大的物体,背景一直相同,利用常规的图像拼接,由于特征点不好寻找,拼接图像就不容易了。本文拼接思想类似线扫描,某些工况有利用。


// SHOW.cpp : 定义控制台应用程序的入口点。
#include <cv.h>
#include "opencv2/highgui/highgui.hpp"


#include <iostream>
#include <fstream>
#include <string>


using namespace std;
using namespace cv;


int g_slider_position=0;
CvCapture *g_capture;


void ontrackbarslide(int pos)
{
cvSetCaptureProperty(
    g_capture,
    CV_CAP_PROP_POS_FRAMES,
    pos
    );
}




vector<Mat> imgs;




Mat  getHistogram1DImage(const Mat & hist, Size imgSize)
{
Mat histImg(imgSize, CV_8UC3);
int Padding = 10;
int W = imgSize.width - 2 * Padding;
int H = imgSize.height - 2 * Padding;
double _max;
minMaxLoc(hist, NULL, &_max);
double Per = (double)H / _max;
const Point Orig(Padding, imgSize.height-Padding);
int bin = W / (hist.rows + 2);


//画方柱
for (int i = 1; i <= hist.rows; i++)
{
Point pBottom(Orig.x + i * bin, Orig.y);
Point pTop(pBottom.x, pBottom.y - Per * hist.at<float>(i-1));
line(histImg, pBottom, pTop, Scalar(255, 0, 0), bin);
}


//画 3 条红线标明区域
line(histImg, Point(Orig.x + bin, Orig.y - H), Point(Orig.x + hist.rows *  bin, Orig.y - H), Scalar(0, 0, 255), 1);
line(histImg, Point(Orig.x + bin, Orig.y), Point(Orig.x + bin, Orig.y - H), Scalar(0, 0, 255), 1);
line(histImg, Point(Orig.x + hist.rows * bin, Orig.y), Point(Orig.x + hist.rows *  bin, Orig.y - H), Scalar(0, 0, 255), 1);


/*drawArrow(histImg, Orig, Orig+Point(W, 0), 10, 30, Scalar::all(0), 2);
drawArrow(histImg, Orig, Orig-Point(0, H), 10, 30, Scalar::all(0), 2);*/


return histImg;
}






int main(void)
{
    cvNamedWindow("Example",CV_WINDOW_AUTOSIZE);//创建窗口
   //   g_capture=cvCreateFileCapture("C:/Users/zhuxiaosheng/Desktop/fengji/shipin/Megamind.avi");
   g_capture=cvCreateFileCapture("C:/Users/zhuxiaosheng/Desktop/fengji/shipin/4k.mkv");
// g_capture=cvCreateFileCapture("C:/Users/zhuxiaosheng/Desktop/fengji/shipin/720P.mkv");


    int frames=(int)cvGetCaptureProperty(
        g_capture,
        CV_CAP_PROP_FRAME_COUNT
        );


    if (frames!=0)
    {
        cvCreateTrackbar(
            "position",
            "Example",
            &g_slider_position,
            frames,
            ontrackbarslide


            );
    }






    IplImage *frame;
frame=cvQueryFr

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值