OpenCV:如何将两个静态图像合并为一个并在其上压印文本?

时间:2010-08-03 13:59:53

标签: c opencv

我已经完成了一个图像处理算法,我从两个相似的图像中提取某些特征。

我正在使用OpenCV2.1,我希望展示这两个相似图像之间的比较。我希望将两个图像组合成一个,其中最终图像将两个图像彼此相邻。如下图所示。 alt text http://img841.imageshack.us/img841/3718/29541068.jpg

此外,黑点是我的算法找到的相似之处,现在我想用数字标记它们。其中,右侧第1点是左侧的对应匹配点。**

哪些OpenCV功能对此工作有用?

2 个答案:

答案 0 :(得分:4)

如果你真的想要它们在同一个窗口,并假设它们具有相同的宽度和高度(如果它们相似,它们应该具有相同的宽度和高度)。您可以尝试创建一个图像,其最终宽度比两个相似图像的宽度大两倍。然后使用ROI复制它们。 您可以编写一个新函数来将这些(有用的)函数封装在一个函数中,以获得一个很好的代码。

Mat img1,img2; //They are previously declared and of the same width & height

Mat imgResult(img1.rows,2*img1.cols,img1.type()); // Your final image

Mat roiImgResult_Left = imgResult(Rect(0,0,img1.cols,img1.rows)); //Img1 will be on the left part
Mat roiImgResult_Right = imgResult(Rect(img1.cols,0,img2.cols,img2.rows)); //Img2 will be on the right part, we shift the roi of img1.cols on the right

Mat roiImg1 = img1(Rect(0,0,img1.cols,img1.rows));
Mat roiImg2 = img2(Rect(0,0,img2.cols,img2.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

于连

答案 1 :(得分:1)

我现在能想到的最简单方法是创建两个窗口而不是一个窗口。你可以使用cvNamedWindow()来做它,然后用cvMoveWindow()并排放置它们。

之后如果您现在在图像上的相似位置,您可以在它们附近绘制文本。看看cvInitFont(),cvPutText()。