图像拼接,手机环绕四周,背景不同,拼接一个完整图像有很多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