Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 基于Hough线将2个图像与openCV对齐_Image_Opencv_Image Processing_Opencv3.0_Hough Transform - Fatal编程技术网

Image 基于Hough线将2个图像与openCV对齐

Image 基于Hough线将2个图像与openCV对齐,image,opencv,image-processing,opencv3.0,hough-transform,Image,Opencv,Image Processing,Opencv3.0,Hough Transform,我有两张(航空)照片,从稍微不同的角度拍摄: 图1: 图2: 我需要在水平方向上重新缩放image1,使其与image2对齐。在不进行任何修改的情况下,相邻放置的两个图像的外观如下所示: 这是期望的结果:(用photoshop制作) 在Photoshop中,我拍摄了image1的右半部分,并将其水平缩小了一点。我对image1的左半部分也做了同样的处理,在那里我必须稍微放大一些 我想知道如何使用openCV实现这一点-使用Hough线变换。我已经开始绘制hough线,但我不知道如何进行变

我有两张(航空)照片,从稍微不同的角度拍摄:

图1:

图2:

我需要在水平方向上重新缩放image1,使其与image2对齐。在不进行任何修改的情况下,相邻放置的两个图像的外观如下所示:

这是期望的结果:(用photoshop制作)

在Photoshop中,我拍摄了image1的右半部分,并将其水平缩小了一点。我对image1的左半部分也做了同样的处理,在那里我必须稍微放大一些

我想知道如何使用openCV实现这一点-使用Hough线变换。我已经开始绘制hough线,但我不知道如何进行变换以使hough线匹配:

这是我的C++代码(从ObjuleC调用):

cv::Mat image1=[im1 CVMat3];
cv::Mat gray_image1;
//转换为灰度
CVT颜色(图像1、灰色图像1、CV\U RGB2GRAY);
cv::Mat dst1,cdst;
Canny(图像1、dst1、40、90、3);
双minLineLength=0;
双maxLineGap=10;
std::矢量线;
//探测线
cv::HoughLines(dst1,lines,1,cv_PI/180,90,minLineLength,maxLineGap);
对于(size_t i=0;i如果(θ> CVYPI/180×70和你使用Python、java或C++…………你是否需要使用Hough阿纳尔线?可能使用图像拼接:我已经尝试过使用PANROSS拼接,但是我有超过2张图像(大约7),并且每个图像上的失真变大(10°角度步)。,这似乎使全景拼接变得不可能。全景拼接总是裁剪我的图像,结果很糟糕。我需要图像保持(几乎)相同的大小。我不确定使用Hough线是否真的能解决我的问题,你有其他想法吗?:-)你看过
Stitcher
类了吗?它被设计用来处理多个图像…并且考虑到似乎只有一个垂直移动,不应该发生垂直裁剪:…但是如果你反对缝合,让我想一想:)如果涉及缩放,我们需要在法师。如果你在使用OpenCV的同时使用其他库,那么请看一下Itk库使用和实现的单峰算法。你使用Python、java还是C++?……你是否需要使用Hough线?它可能是使用图像拼接的:我已经尝试过使用PANRONATH拼接,但是我有MO。超过2张图像(大约7张),每幅图像的失真都会更大(10°角度步长),这似乎使全景拼接变得不可能。全景拼接总是裁剪我的图像,结果很糟糕。我需要图像保持(几乎)它们的大小相同。我不确定使用Hough线是否真的能解决我的问题,你有其他想法吗?:-)你看过
Stitcher
类吗?它设计用于处理多个图像…并且考虑到似乎只有垂直移动,不应该垂直裁剪:…但是如果你反对缝合,让我想一想:)如果涉及缩放,我们需要在图像之间拟合仿射变换。如果您愿意选择使用其他库和OpenCV,请查看使用ITK库并由ITK库实现的单峰算法。
cv::Mat image1 = [im1 CVMat3];
cv::Mat gray_image1;
// Convert to Grayscale
cvtColor( image1, gray_image1, CV_RGB2GRAY );

cv::Mat dst1, cdst;
Canny(image1, dst1, 40, 90, 3);

double minLineLength = 0;
double maxLineGap = 10;

std::vector<cv::Vec2f> lines;
// detect lines
cv::HoughLines(dst1, lines, 1, CV_PI/180, 90, minLineLength,maxLineGap );


for( size_t i = 0; i < lines.size(); i++ ) {
    float rho = lines[i][0], theta = lines[i][1];
    if( theta>CV_PI/180*70 && theta<CV_PI/180*110) {

        cv::Point pt1, pt2;
        double a = cos(theta), b = sin(theta);
        double x0 = a*rho, y0 = b*rho;
        pt1.x = cvRound(x0 + 1000*(-b));
        pt1.y = cvRound(y0 + 1000*(a));
        pt2.x = cvRound(x0 - 1000*(-b));
        pt2.y = cvRound(y0 - 1000*(a));

        line( image1, pt1, pt2, cvScalar(10,100,255), 3, CV_AA);
    }
}