플라스틱 부품의 직선 표면의 단일 이미지에서 많은 이미지 (25)를 스티치합니다. 이미지는 다음과 같다 : 나는 Stitcher은 클래스 형식을 OpenCV를 사용하는 것을 시도하고있다opencv에서 Stitcher 클래스를 사용하여 많은 이미지를 스티칭 할 수 없습니다. C++
. 내 코드는 여기에 있습니다 :
#include <iostream>
#include <fstream>
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/stitching.hpp>
using namespace std;
using namespace cv;
bool try_use_gpu = false;
vector<Mat> imgs;
string result_name = "result.jpg";
Mat img1, img2,img3,img4,img5,img6,img7, pano;
void printUsage();
//int parseCmdArgs(int argc, char** argv);
int main(int argc, char* argv[])
{
// Load images from HD.
img1 = imread("1.bmp");
img2 = imread("2.bmp");
img3 = imread("3.bmp");
img4 = imread("4.bmp");
// Put images into vector of images "imgs".
imgs.push_back(img1);
imgs.push_back(img2);
imgs.push_back(img3);
imgs.push_back(img4);
// Create stitcher instance and use stitch method with imgs.
Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
stitcher.setPanoConfidenceThresh(0.8);
Stitcher::Status status = stitcher.stitch(imgs, pano);
if (status != Stitcher::OK)
{
cout << "Can't stitch images, error code = " << status << endl;
return -1;
}
imwrite(result_name, pano);
return 0;
}
내가 항상 말하는 오류 : 시스템이 더 많은 이미지를 필요로한다는되도록 "= 1 이미지, 오류 코드 스티치 할 수 없습니다." 디버깅 할 때 이미지가 제대로로드 된 다음 벡터 img가 올바르게 생성 된 것을 확인합니다. 그 이유는 무엇일까요? 내 계산은 또한 꽤 오래 지속됩니다 ...
이미지의 크기를 알려주시겠습니까? –
IMHO Stitcher는 당신의 의견을 과소 평가합니다. 이미지가 순서대로 있다고 가정하고, 그들은 왜곡되지 않고 카메라가 한 축을 따라 일정한 방향으로 움직이고 있다면, 이것을 활용할 수 있습니다. 템플릿 매칭을 사용하여 인접한 이미지의 겹치는 부분을 찾고이를 사용하여 합성 이미지를 만들 수 있습니다. 가장 간단한 방법은 중첩되지 않은 부분을 연결하는 것입니다. 교대로 겹치는 부분에 일부 블렌딩을 수행하십시오. | 그러나 이상적인 접근 방식은 이것을 모두 수행 할 필요를 없애는 것입니다 - 라인 카메라 + 일부 엔코더. –
@ skoda23 [이 결과] (http://i.imgur.com/2bSw2dj.png)를 생성하는 매우 간단한 [Python의 프로토 타입] (http://pastebin.com/dMfGfyJ1). 슬라이스가 분명히 합성 예제처럼 잘 정렬되지 않는 경우에 대비하여 수직 "흔들기 공간"을 추가 할 수 있습니다. 또한, 겹치는 부분의 블렌딩을'addWeighted'를 사용하여 절반 만 반올림하거나 가중치에 그라디언트를 사용하여 추가하십시오. –