2014-09-07 2 views
0

У меня есть следующий код для отображения 2 изображения рядом с Афоризм с небольшим смещением как по х dirrection (расстояние) и у dirrection (YOffset):OpenCV объединить 2 изображения со смещением в у dirrection

void output(Mat left, Mat right) { 
    Mat imgResult(left.rows + abs(yoffset), right.cols + left.cols + spacing, 
      left.type()); 

    Mat roiImgResult_Left = imgResult(Rect(0, 0, left.cols, left.rows)); 
    Mat roiImgResult_Right = imgResult(
      Rect(left.cols + spacing, 0, right.cols, right.rows+yoffset)); 

    Mat roiImg1 = left(Rect(0, 0, left.cols, left.rows)); 
    Mat roiImg2 = right(Rect(0, 0, right.cols, right.rows+yoffset)); 
    //Mat roiImg = Rect(0,0,spacing,right.rows); 

    roiImg1.copyTo(roiImgResult_Left); //Img1 will be on the left of imgResult 
    roiImg2.copyTo(roiImgResult_Right); //Img2 will be on the right of imgResult 
    resize(imgResult, imgResult, imagesize); 
    imshow("Final imgage", imgResult); 
    cv::moveWindow("Final imgage", screenx, screeny); 
} 

критическим моментом является сдвиг-который я не могу показаться, чтобы получить работу, текущая версия дает ошибку

OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in Mat, file /home/thijs/Desktop/opencv-2.4.9/Install-OpenCV/Ubuntu/OpenCV/opencv-2.4.9/modules/core/src/matrix.cpp, line 323 
terminate called after throwing an instance of 'cv::Exception' 
    what(): /home/thijs/Desktop/opencv-2.4.9/Install-OpenCV/Ubuntu/OpenCV/opencv-2.4.9/modules/core/src/matrix.cpp:323: error: (-215) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows in function Mat 

. Если я удалю + yoffset из Mat roiImg2 = right(Rect(0, 0, right.cols, right.rows+yoffset));, это не даст мне исключения, но получившееся изображение выглядит действительно странно. У кого-нибудь есть опыт?

Таким образом, в некоторой степени immages это то, что делает этот код:

_______ 
|  |   ^yoffset 
|left | ______  v 
|______| |right| 
      |_____| 
     <-> spacing 

все это только в одном окне (не важно, что в остальном, так что это просто случайные данные, которые были в памяти) ,

ответ

1

В этом исключении указано, что указанный ROI охватывает границы изображений.

Я думаю, что у вас есть опечатка на этих линиях:

Mat roiImgResult_Right = imgResult(Rect(left.cols + spacing, 0, right.cols, right.rows+yoffset)); 
... 
Mat roiImg2 = right(Rect(0, 0, right.cols, right.rows+yoffset)); 

Допуская yoffset является положительным, вы должны иметь следующее:

Mat roiImgResult_Right = imgResult(Rect(left.cols + spacing, yoffset, right.cols, right.rows)); 
... 
Mat roiImg2 = right(Rect(0, 0, right.cols, right.rows)); 

Если отрицательный yoffset следует ожидать, соответствующий код будет немного сложнее (так как вам придется обрезать правильное изображение или сдвиньте левый).

Смежные вопросы